在异步请求中要返回文件流,不能使用JQuery,因为$.ajax,$.post 不支持返回二进制文件流的类型,可以看到下图,dataType只支持xml,json,script,html这几种格式,没有blob类型。所以只能选择使用原生Ajax XMLReques对象进行处理

前端代码

function output() {
var branchCode = $("#currentBranchCode").val();
var transDate = $("#currentTransDate").val();
if (branchCode == "" || transDate == "") {
layer.msg("暂无记录,无法导出", { icon: 7, time: 1000 });
return;
}
var fileName = $("table caption").html() + ".xls";//设置下载时候的文件名
//要请求的Url和携带的参数
var url = "/SellAnalyze/Export?currentBranchCode=" + branchCode + "&currentTransDate=" + transDate;
var xhr = new XMLHttpRequest();
//设置响应类型为blob类型
xhr.responseType = "blob";
xhr.onload = function () {
if (this.status == "200") {
            //获取响应文件流  
var blob = this.response;
var aElem = document.getElementById("exportUrl");
            //将文件流保存到a标签
aElem.href = window.URL.createObjectURL(blob);
aElem.download = fileName;
aElem.onload = function (e) {
window.URL.revokeObjectURL(aElem.href);
};
$("#exportUrl").removeClass("hidden");
layer.confirm('文件已导出, 立即下载?', function (index) {
$("#download").click(); layer.close(index);
});
}
} xhr.open("post", url, true);
xhr.send();
}

后端代码

     public ActionResult Export(int? currentBranchCode, DateTime currentTransDate)
{
MemoryStream ms = NPOIExcelWrite(datas);
ms.Seek(0, SeekOrigin.Begin);
return File(ms, "application/vnd.ms-excel");
} /// <param name="datas">写入的数据</param>
/// <returns></returns>
private MemoryStream NPOIExcelWrite(SellDTO[] datas)
{
string[] titles = { "货品类别", "货品类别描述", "销售额", "同比", "环比" };
NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1");
NPOI.SS.UserModel.IRow row = sheet.CreateRow();
for (int i = ; i < titles.Length; i++)
{
row.CreateCell(i).SetCellValue(titles[i]);
}
for (int i = ; i < datas.Length; i++)
{
row = sheet.CreateRow(i + );
row.CreateCell().SetCellValue(datas[i].JewelryType);
row.CreateCell().SetCellValue(datas[i].JewelryTypeDesc);
row.CreateCell().SetCellValue(datas[i].CurrentMonthSaleroom.ToString("F2"));
row.CreateCell().SetCellValue(datas[i].YearOverYear);
row.CreateCell().SetCellValue(datas[i].LinkRelative);
} MemoryStream ms = new MemoryStream();
book.Write(ms);
ms.Flush();
book = null;
return ms;
}

参考:https://blog.csdn.net/swl979623074/article/details/77855629/

https://www.cnblogs.com/cdemo/p/5225848.html

https://blog.csdn.net/fangchen12312/article/details/55271296

Ajax异步请求返回文件流(eg:导出文件时,直接将导出数据用文件流的形式返回客户端供客户下载)的更多相关文章

  1. maven工程 java 实现文件上传 SSM ajax异步请求上传

    java ssm框架实现文件上传 实现:单文件上传.多文件上传(单选和多选),并且用 ajax 异步刷新,在当前界面显示上传的文件 首先springmvc的配置文件要配置上传文件解析器: <!- ...

  2. 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回

    作者:ssslinppp      时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...

  3. 09.VUE学习之watch监听属性变化实现类百度搜索栏功能ajax异步请求数据,返回字符串

    cmd下安装axios npm install axios 安装好后,会多出node_modules文件夹 思路: 监听data里的word改变时,发送ajax异步请求数据, 把返回的数据赋值给dat ...

  4. jquery的ajax异步请求接收返回json数据

    http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...

  5. ajax异步请求返回对象

    使用ajax异步请求返回一个对象. java code: @RequestMapping({"getAstSingleWheelImg_bbs"+Constant.JSON}) @ ...

  6. ajax异步请求

    做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school.c ...

  7. jquery Ajax异步请求之session

    写了一个脚本,如下: $(function () { $("#btnVcode").click(function () { var receiveMobile = $(" ...

  8. 关于我们ajax异步请求的方法与知识

      做前端开发的朋友对于ajax异步更新一定印象深刻,作为刚入坑的小白,今天就和大家一起聊聊关于ajax异步请求的那点事.既然是ajax就少不了jQuery的知识,推荐大家访问www.w3school ...

  9. Ajax -异步请求 -jquery中ajax分类 -第一层 $.ajax -第二层($.get /$.post) -第三层($.getJson/$.getScript) -相应演示

    Ajax 1.标准请求响应时浏览器的动作(同步操作) 1.1浏览器请求什么资源,跟随显示什么资源2.ajax:异步请求. 2.1局部刷新,通过异步请求,请求到服务器资源数据后,通过脚本修改页面中部分内 ...

随机推荐

  1. 将ubuntu系统迁移到ssd固态

    朋友送了一个固态硬盘给我,因此将原机械硬盘上的系统迁移到固态硬盘上. 原机械硬盘(dev/sdb)装有win10和ubuntu双系统.分区情况如下: sda1:ESP分区 sda2:资料 sda3:资 ...

  2. Access分页语句

    一.双TOP法高效率的Access分页的SQL语句,语法格式: SELECT * FROM (SELECT TOP "&pagesize&" * FROM (SEL ...

  3. The Cats' Feeding Spots

    The Cats' Feeding Spots 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 In Yan Yuan, the Peking University cam ...

  4. (转)深入详解Java线程池——Executor框架

    转:https://yq.aliyun.com/articles/633782?utm_content=m_1000015330 在Java中,使用线程来异步执行任务.Java线程的创建与销毁需要一定 ...

  5. (转)使用windows server2008 创建 Hyper-V虚拟机

    转:https://jingyan.baidu.com/article/7c6fb42833ad4980652c904f.html Hyper-v是微软提供的虚拟机,利用server 2008搭建hy ...

  6. HDU 6121 Build a tree(k叉树的子树大小相异)

    http://acm.hdu.edu.cn/showproblem.php?pid=6121 题目大意: 给你一颗 n 个节点的完全 k 叉树,问你这棵树中所有子树结点个数的总异或值. 分析: 我们很 ...

  7. Log4j log for java(java的日志) 的使用

    log4j的使用,Log4j log for java(java的日志) 是java主流的日志框架,提供各种类型,各种存储,各种格式,多样化的日志服务. 可以再Apache官网下载得到. 我们下载lo ...

  8. 拒绝从入门到放弃_《Openstack 设计与实现》必读目录

    目录 目录 关于这本书 必看知识点 最后 关于这本书 <Openstack 设计与实现>是一本非常值得推荐的书,为数不多的 Openstack 开发向中文书籍中的精品.如果希望从事 Ope ...

  9. SHELL脚本里执行的东西需要多次回车确认,怎么实现自动回车确认?

    写了个自动配置的shell脚本,其中有几行是 …… ./build-key-server ./build-key-client …… 在执行build-key-server和build-key-cli ...

  10. python实现基于两张图片生成圆角图标效果的方法

    python实现基于两张图片生成圆角图标效果的方法 这篇文章主要介绍了python实现基于两张图片生成圆角图标效果的方法,实例分析了Python使用pil模块进行图片处理的技巧,分享给大家供大家参考. ...