从ASP .Net Web API导出到HTML中的Excel
问题描述:
我在我的HTML页面中导出到Excel按钮,onClick按钮我将发送GET请求到ASP .Net Web API,它从数据库获取数据并返回HTTPContext二进制响应。在前端,我正在获取Excel文件的二进制数据。如何一旦回应来直接下载文件?从ASP .Net Web API导出到HTML中的Excel
HttpContext.Current.Response.ClearContent();
FileStream objFileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
byte[] excelResponse = new byte[objFileStream.Length];
objFileStream.Read(excelResponse, 0, excelResponse.Length);
HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", fileName));
HttpContext.Current.Response.BinaryWrite(excelResponse);
我的前端二进制内容
PKS��J�ɉ�fxl/workbook.xml �(��P�N�0����SA5������8�����4�Z^���8�I�n"�+�Y�����|}����ጉ�V,����V�����v��OJ�=�
如何下载为文件?我不想使用表格
下面是我点击导出按钮的AJAX调用。
// Make AJAX call
$.ajax({
type: "GET",
url: "http://localhost:8899/api/ExportDataToExcel/",
data: oData,
headers: {
"Authorization": "Bearer " + sToken,
},
success: function (oResult) {
onSuccess(oResult);
},
error: function (oResponse) {
onFailure(oResponse);
}
});
这就是我正在做的导出到Excel按钮点击。
如果我使用表单提交,那么我得到授权拒绝错误,因为API期望持票人令牌。下面的代码提供授权禁止错误
var form = document.createElement("form")
form.action = url + 'exportDataToExcel/';
form.method = "GET";
document.body.appendChild(form);
form.submit(true);
document.body.removeChild(form);
答
我通过使用XMLHttpRequest替代AJAX解决了这个问题,因为AJAX不能接收二进制缓冲区响应。一旦我收到XHR响应,我创建JavaScript Blob,然后锚定标签并将该锚定元素重定向到BlobObjectURL。
前端的代码是什么?有相当多的问题提出相同的问题。 例如: https://*.com/questions/28165424/download-file-via-jquery-ajax-post – ACOMIT001
可能的重复[通过jquery ajax post下载文件](https://*.com/问题/ 28165424/download-file-via-jquery-ajax-post) – ACOMIT001
所有的帖子都用FORM和FORM提交说明..如果我使用表单提交并调用相同的GET方法,那么它正在工作。但是为什么我应该使用FORM? – Nanju