在异步请求中要返回文件流,不能使用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. uboot tag存储主要部分代码

    https://www.cnblogs.com/pokerface/p/5217106.html     cmd_bootm.c //传递给内核的参数      int do_bootm (cmd_t ...

  2. 01.helloworld--标签

    """参考网站:http://python.cocos2d.org/doc/programming_guide/index.html""" ...

  3. Cobaltstrike系列教程(一)-简介与安装

    0x001-Cobaltstrike简介 Cobalt Strike是一款美国Red Team开发的渗透测试神器,常被业界人称为CS.这款神器许多大佬们都已经玩的很6,我一个菜鸡玩的略有心得,因此写一 ...

  4. ajax传递对象到MVC控制器

    1.view层中ajax写法: function Add2() { var model = new Object(); model.UserName = $('#UserName').val(); m ...

  5. luogu P1307 数字反转 x

    题目描述 给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2). 输入输出格式 输入格式: 输入 ...

  6. [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)

    题目描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响. 选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为$$\sum \li ...

  7. 阿里云不支持stmp 的25端口,必须

    第一种方法 到阿里云解封25端口 特别注意阿里云的<25端口使用服务协议>:    我/我公司承诺并保证TCP 25端口仅用来连接第三方的SMTP服务器,从第三方的SMTP服务器外发邮件. ...

  8. 测开之路七十二:性能测试工具之locust简介

    locust官网:https://locust.io/ locust安装(不支持python3.7):pip install locustio   或者pycharm安装 官网给出的样例 根据官网代码 ...

  9. vue项目运行时出现的问题(less、vue poackages version)

    今天运行项目,项目一直好好的却突然运行时报错,如下: 是引入文件报错问题,回头查看了一下文件在main.js的引入: import '@/assets/styles/custom.less'; 文件引 ...

  10. pandas melt 与pivot 函数

    (掌握这个,基本就完美无缺的任意按照自己的想法,更改列了.) 背景: 最近有个excel 数据需要转化的过程. 数据量还挺大的,大概有30多万. 需要把某些行变成列,有些列又变成行. 这个操作本身就比 ...