我無法使其通過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文件,那麼它不是損壞它的傳輸。當你將它保存在服務器上時,你能檢查內容長度與文件的確切長度嗎? –