1.安装包

Install-Package Magicodes.IE.AspNetCore

2.开始配置

Startup.cs的Configure()方法中,在UseRouting()中间件之后,注册如下中间件

public void Configure(IApplicationBuilder app)
{app.UseRouting();app.UseMagiCodesIE();app.UseEndpoints(endpoints =>{endpoints.MapControllers();});
}

上面这种以中间件形式可以为我们提供导出服务,那么我们再看一下另一种方式如下所示:

public void ConfigureServices(IServiceCollection services){services.AddControllers(options=>options.Filters.Add(typeof(MagicodesFilter)));}

上面两种方式都可以为我们提供导出服务,我们只需要对我们的控制器进行配置我们的特性,在这边呢 特性主要做的是一个标识作用,标识他的一些相关的内容数据,同时标识他可以当成文件导出。

[HttpGet("excel")]
[Magicodes(Type = typeof(ExportTestDataWithAttrs))]
public List<ExportTestDataWithAttrs> Excel()
{return GenFu.GenFu.ListOf<ExportTestDataWithAttrs>(100);
}

上面代码片段中我们标识这个类允许被导出。同时我们需要通过Type指定我们被导出类的类型。

这样填写完后我们可以通过对该地址的调用,但是注意我们必须要添加请求头以标识被导出的文件类型。如果不添加请求头,那么此处将返回的还是json格式的数据。请求头名称为Magicodes-Type

/// <summary>///     XLSX/// </summary>internal const string XLSXHttpContentMediaType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";/// <summary>///     PDF/// </summary>internal const string PDFHttpContentMediaType = "application/pdf";/// <summary>///     DOCX/// </summary>internal const string DOCXHttpContentMediaType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";/// <summary>///     HTML/// </summary>internal const string HTMLHttpContentMediaType = "text/html";

如果说是模板导出word或者pdf甚至说html文件那么我们也是同样的操作如下所示:

[HttpGet("Word")][Magicodes(Type = typeof(ReceiptInfo), TemplatePath = ".//ExportTemplates//receipt.cshtml")]public ReceiptInfo Word(){return new ReceiptInfo{Amount = 22939.43M,Grade = "2019秋",IdNo = "43062619890622xxxx",Name = "张三",Payee = "湖南心莱信息科技有限公司",PaymentMethod = "微信支付",Profession = "运动训练",Remark = "学费",TradeStatus = "已完成",TradeTime = DateTime.Now,UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",Code = "19071800001"};}

我们还是需要对其指定Type,然后通过TemplatePath进行指定模板地址即可

同样的我们还可以通过请求头进行标识本次请求是否是文件格式导出。

[HttpGet("pdf")][Magicodes(Type = typeof(BatchPortraitReceiptInfoInput), TemplatePath = ".//ExportTemplates//batchReceipt.cshtml")]public BatchPortraitReceiptInfoInput Pdf(){var input = new BatchPortraitReceiptInfoInput{Payee = "湖南心莱信息科技有限公司",SealUrl =@"data:image/jpeg;base64....",LogoUrl =@"data:image/png;base64....",ReceiptInfoInputs = new List<BatchPortraitReceiptInfoDto>()};for (var i = 0; i < 500; i++)input.ReceiptInfoInputs.Add(new BatchPortraitReceiptInfoDto{Amount = 22939.43M,Grade = "2019秋",IdNo = "43062619890622xxxx",Name = "张三",PaymentMethod = "微信支付",Profession = "运动训练",Remark = "学费",TradeStatus = "已完成",TradeTime = DateTime.Now,UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",Code = "1907180000" + i});return input;}[HttpGet("Html")][Magicodes(Type = typeof(ReceiptInfo), TemplatePath = ".//ExportTemplates//receipt.cshtml")]public ReceiptInfo Html(){return new ReceiptInfo{Amount = 22939.43M,Grade = "2019秋",IdNo = "43062619890622xxxx",Name = "张三",Payee = "湖南心莱信息科技有限公司",PaymentMethod = "微信支付",Profession = "运动训练",Remark = "学费",TradeStatus = "已完成",TradeTime = DateTime.Now,UppercaseAmount = "贰万贰仟玖佰叁拾玖圆肆角叁分",Code = "19071800001"};}

Swagger中使用

通过继承IOperationFilter接口,创建AddRequiredHeaderParameter类,添加一个header类型的参数,并且Header Name为Magicodes-Type如下所示:

public class AddRequiredHeaderParameter : IOperationFilter{public void Apply(OpenApiOperation operation, OperationFilterContext context){if (operation.Parameters == null){operation.Parameters = new List<OpenApiParameter>();}operation.Parameters.Add(new OpenApiParameter{Name = "Magicodes-Type",In = ParameterLocation.Header,Required = false,Description = "根据HttpContentMediaType添加指定的header值,导出不同格式的文件。"});}}

然后转到ConfigureServices()方法中,在AddSwaggerGen方法中添加如下内容:

c.OperationFilter<AddRequiredHeaderParameter>();

XMLHttpRequest使用

XMLHttpRequest的使用中,和正常导出来说几乎一样,不过需要额外注意以下几个地方:

  • 修改responseType为blob。
  • 添加Http Header。
  • 以及对二进制流的处理。
document.querySelector("#downloadexcel").onclick = function() {var xmlhttp = new XMLHttpRequest();xmlhttp.open("GET", "https://localhost:5001/api/Magicodes/excel", true); //也可以使用Postxmlhttp.responseType = 'blob';xmlhttp.setRequestHeader("Magicodes-Type", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");xmlhttp.send();// readyState == 4 为请求完成,status == 200为请求成功返回的状态xmlhttp.onreadystatechange = function() {if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {var name = xmlhttp.getResponseHeader("Content-disposition");var filename = name.substring(20, name.length);var blob = new Blob([xmlhttp.response], {type: 'text/xlsx'});var Url = URL.createObjectURL(blob);var link = document.createElement('a');link.href = Url;link.download = filename;link.click();}}
}

jQuery Ajax使用

对于jQuery AjaxXMLHttpRequest的注意事项是一致的。详细可参考如下代码示例,不过目前对于示例的演示只是针对于Excel导出的,关于其他格式的导出,可参考我们前面介绍的Magicodes-Type常量内容,当然对于其他文件的导出同样也是对responseType、以及blob类型进行修改。

$("#downloadexcel").click(function() {$.ajax({url: "https://localhost:5001/api/Magicodes/excel",type: 'GET',headers: {'Magicodes-Type': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'},xhrFields: {responseType: 'blob'},success: function(data, status, xhr) {var name = xhr.getResponseHeader("Content-disposition");var filename = name.substring(20, name.length);var blob = new Blob([data], {type: 'text/xlsx'});var Url = URL.createObjectURL(blob);var link = document.createElement('a');link.href = Url;link.download = filename;link.click();}});
})

Magicodes.IE.ASPNETCore之多样化接口使用相关推荐

  1. Magicodes.IE.AspNetCore之一行代码多格式导出

    主要步骤 1.安装包 Install-Package Magicodes.IE.AspNetCore 2.开始配置 在Startup.cs的Configure()方法中,在UseRouting()中间 ...

  2. Magicodes.IE之总体教程

    简介 Magicodes.IE,导入导出通用库,支持Dto导入导出.模板导出.花式导出以及动态导出,支持Excel.Csv.Word.Pdf和Html. 内容合集 Magicodes.IE.AspNe ...

  3. Asp.NetCoreWebApi图片上传接口(二)集成IdentityServer4授权访问(附源码)

    写在前面 本文地址:http://www.cnblogs.com/yilezhu/p/9315644.html 作者:yilezhu 上一篇关于Asp.Net Core Web Api图片上传的文章使 ...

  4. 基于ABP和Magicodes实现Excel导出操作

      前端使用的vue-element-admin框架,后端使用ABP框架,Excel导出使用的Magicodes.IE.Excel.Abp库.Excel导入和导出操作几乎一样,不再介绍.文本主要介绍E ...

  5. drf 安装_drf 生成接口文档

    REST framework可以自动帮助我们生成接口文档.接口文档以网页的方式呈现. 自动接口文档能生成的是继承自APIView及其子类的视图. 一.安装依赖 REST framewrok生成接口文档 ...

  6. 第9课【USB协议】USB总线 接口 端点 管道 数据包 枚举 STM32_USB-FS-Device_Lib V4.1.0

    目录 简介 背景 特点 版本 数据流模型 总线拓扑结构 主/从设备通信流 端点 管道 物理层 接口类型 USB Type-A USB Type-B USB Type-C 引脚定义 4PIN 9PIN ...

  7. Docker最全教程——从理论到实战(三)

    容器是应用走向云端之后必然的发展趋势,因此笔者非常乐于和大家分享我们这段时间对容器的理解.心得和实践. 本篇教程持续编写了2个星期左右,只是为了大家更好地了解.理解和消化这个技术,能够搭上这波车. 你 ...

  8. Docker最全教程——从理论到实战

    Docker 正在逐渐成为容器行业的事实标准,受到 Windows 和 Linux 生态系统领域最重要供应商的支持. (Microsoft 是支持 Docker 的主要云供应商之一.)现在,Docke ...

  9. ASP.NET Core 日志框架:Serilog

    在 ASP.NET Core 日志模型 中对日志整体实现方式进行了介绍,通过使用内置日志记录器来实现日志的输出路径.而在实际项目开发中,使用第三方日志框架来记录日志也是非常多的,首先一般基础的内置日志 ...

最新文章

  1. php数独游戏开发,使用vue如何开发数独游戏
  2. 《Redis设计与实现》之第七章:压缩列表
  3. 集合框架源码分析一(接口篇)
  4. MySQL5.5多实例编译安装——mysqld_multi
  5. Python程序设计语言基础03:基本数据类型
  6. php中超过int真么办,PHP int 超大溢出整数的 加减运算函数,如果有更好的方法欢迎探讨...
  7. vs 外部依赖项、附加依赖项以及如何添加依赖项目
  8. python输入n×n的矩阵_Python使用shape计算矩阵的行和列
  9. 正则表达式常用的js验证
  10. 2022新版千月影视双端APP带H5功能开源程序支持当面付和易支付
  11. Java Web 2.1.4 HTML 表单标签与表单设计 (实例)
  12. 使用Python编写简单的端口扫描程序
  13. 已解决-NVIDIA安装程序失败-win10
  14. Delphi IdHTTP1下载文件防止假死 ( - 大悟还俗
  15. 夜幕下的区块链:揭露区块链评级的猫腻
  16. 【office2010】利用尾注添加参考文献
  17. 数据分析真题日刷 | 网易2018校招数据分析师笔试卷
  18. 使用微信支付接口生成支付二维码
  19. 机房用计算机桌,机房电脑桌椅的正常尺寸是多少
  20. 【学习打卡】GradCAM可解释性分析

热门文章

  1. linux时间管理,时钟中断,系统节拍
  2. linux监控php脚本执行时间,在LINUX环境下定时执行php脚本
  3. Hexo Boot 博客系统介绍
  4. html图片3d球体,HTML5 三维透视球体运动
  5. Matlab系列之GUI设计基础
  6. css控制文本超出省略...
  7. FIL未来走势分析,把握100U关键点位!市场无情,反复操作是深渊危机
  8. 屌丝向女神示爱,不料女神会Java,微微改动代码,把屌丝憋死了…
  9. 测试架构工程师需要具备哪些能力 ?
  10. SAP Portal实施分享_自定义LoginModule模块