我无法使其通过web API下载由closedxml创建的excel文件。 如果我将文件保存在服务器上,它看起来不错,但只要我把它放入一个流中并将它返回给web api,那么在浏览器中只会收到一个损坏的文件。使用closedxml从web api下载excel文件
正如在几篇文章中建议我使用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)
}
success_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,可以将其打开并查看结构。所以它似乎是损坏它的传输 – TwoHeadedSquirrel
如果你可以打开.zip文件,那么它不是损坏它的传输。当你将它保存在服务器上时,你能检查内容长度与文件的确切长度吗? –