.NET后端返回File文件,及前端处理直接在浏览器下载

后端代码

AllowAnonymous

public System.Web.Mvc.ActionResult ExportByteExcel(string datatab, string columnnames, string schemecode)

{

返回excel。

string ReportName = "ExcelTemplete" + DateTime.Now.Ticks.ToString();

IWorkbook workbook = new HSSFWorkbook();

ISheet sheet = workbook.CreateSheet("sheet1");

int count = 0;

// 生成标题行

IRow row = sheet.CreateRow(count++);

int headerIndex = 0;

foreach (string columnName in newheads.Keys)

{

row.CreateCell(headerIndex++).SetCellValue(newheads[columnName]);

}

//生成数据

foreach (Dictionary<string, object> data2 in datas)

{

row = sheet.CreateRow(count++);

int bodyIndex = 0;

foreach (string key in newheads.Keys)

{

row.CreateCell(bodyIndex++).SetCellValue(data2[key] != null ? data2[key].ToString() : "");

}

}

MemoryStream ms = new MemoryStream();

workbook.Write(ms);

ms.Position = 0;

string strPath = System.Web.HttpContext.Current.Server.MapPath("~/TempImages/");

string strExcelFile = strPath + ReportName + ".xls";

FileStream OutFile = new FileStream(strExcelFile, FileMode.Create, FileAccess.Write);

byte[] btArray = ms.ToArray();

OutFile.Write(btArray, 0, btArray.Length);

OutFile.Flush();

OutFile.Close();

//object FileUrl = ExportExcel.ExportTempExecl("ExcelTemplete" + DateTime.Now.Ticks.ToString(), newheads, datas);

//修改utf8编码,不然可能汉字会乱码

string encodedFileName = System.Web.HttpUtility.UrlEncode((ReportName + ".xls").Replace("/", ""), System.Text.Encoding.UTF8);

var contentDisposition = new ContentDispositionHeaderValue("attachment")

{

FileName = encodedFileName

};

Response.Headers.Add("Content-Disposition", contentDisposition.ToString());

var contentType = "application/octet-stream";

Response.Headers.Add("Content-Type", contentType);

return File(btArray, contentType);

}

前端代码直接在浏览器下载:

var xhr = new XMLHttpRequest();

xhr.open("POST", "/portal/TXEmail/ExportByteExcel?datatab=" + encodeURIComponent(data.datatab) + "&columnnames=" + data.columnnames + "&schemecode=" + data.schemecode, true);

xhr.responseType = "blob";

xhr.onreadystatechange = function () {

if (xhr.readyState === XMLHttpRequest.DONE) {

if (xhr.status === 200) {

//获取header中的内容

var contentDispositionHeader = xhr.getResponseHeader('Content-Disposition');

var fileName = contentDispositionHeader ? contentDispositionHeader.split('filename=')[1] : 'default_filename.xls';

//需要对汉字编码否则会可能会乱码

var decodedFileName = decodeURIComponent(fileName);

// 创建Blob对象

var blob = new Blob([xhr.response], { type: 'application/octet-stream' });

// 创建临时URL并分配给一个链接

var url = window.URL.createObjectURL(blob);

var a = document.createElement('a');

a.href = url;

a.download = decodedFileName;

document.body.appendChild(a);

a.click();

} else {

console.error("Error:", xhr.statusText);

}

}

};

xhr.send();

相关推荐
幼儿园技术家4 分钟前
Uniapp简易使用canvas绘制分享海报
前端
开开心心就好1 小时前
免费PDF处理软件,支持多种操作
运维·服务器·前端·spring boot·智能手机·pdf·电脑
全宝1 小时前
🎨前端实现文字渐变的三种方式
前端·javascript·css
yanlele1 小时前
前端面试第 75 期 - 2025.07.06 更新前端面试问题总结(12道题)
前端·javascript·面试
妮妮喔妮2 小时前
【无标题】
开发语言·前端·javascript
谦行2 小时前
深度神经网络训练过程与常见概念
前端
Simon_He2 小时前
一个免费的在线压缩网站超越了付费的压缩软件
前端·开源·图片资源
巴巴_羊3 小时前
React Ref使用
前端·javascript·react.js
拾光拾趣录3 小时前
CSS常见问题深度解析与解决方案(第三波)
前端·css
轻语呢喃3 小时前
JavaScript :字符串模板——优雅编程的基石
前端·javascript·后端