【发布时间】:2018-02-01 23:21:35
【问题描述】:
我无法通过 Web API 下载由 closedxml 创建的 excel 文件。 如果我将文件保存在服务器上看起来不错,但是一旦我将其放入流中并将其返回到 Web api,那么浏览器中只会收到一个损坏的文件。
正如几篇文章所建议的那样,我使用 httpResponseMessage,但在浏览器中,标题中的文件名永远不会到达。
我们正在使用:
"Microsoft.AspNet.WebApi" 版本="5.2.3" targetFramework="net461
"ClosedXML" 版本="0.88.0" targetFramework="net461"
WebAPI 代码:
var wb = new XLWorkbook();
var ws = wb.Worksheets.Add("Parcel List");
MemoryStream fs = new MemoryStream();
wb.SaveAs(fs);
fs.Position = 0;
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(fs.GetBuffer());
result.Content.Headers.ContentLength = fs.Length;
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "List" + "_" + DateTime.Now.ToShortDateString() + ".xlsx"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
return result;
这里是javascript代码:
context.$http.post(config.get_API_URL() + 'api_call', excel_list,
{responseType: 'application/octet-stream'})
.then(
success_function,
error_function)
}
成功函数:
function(response) {
var headers = response.headers;
var blob = new Blob([response.body],
{type:'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'},
);
window.open(window.URL.createObjectURL(blob));
}
【问题讨论】:
-
如果保存文件,重命名为.zip,可以打开吗?我试图弄清楚内部是否损坏或包装是否在传输过程中损坏。
-
我将工作簿保存在服务器上并将其重命名为 .zip,可以打开它并查看结构。所以似乎是传输破坏了它
-
如果您可以打开 .zip 文件,则不是传输损坏了它。当您将文件保存在服务器上时,您可以检查内容长度与文件的确切长度吗?
-
也看看stackoverflow.com/a/24129082/179494 - 似乎不支持通过 AJAX 下载文件。它可能适用于您。
标签: javascript excel asp.net-web-api download closedxml