我從服務器端獲取的POST請求的HTTP響應是一個xlsx文件。如何在angularjs 1中下載該文件?如何自動下載服務器發送的xlsx文件(在angularjs 1中)
注:res.download()不會在這裏工作,因爲它,我想提出一個POST請求,並res.download()僅適用於GET請求工作
我從服務器端獲取的POST請求的HTTP響應是一個xlsx文件。如何在angularjs 1中下載該文件?如何自動下載服務器發送的xlsx文件(在angularjs 1中)
注:res.download()不會在這裏工作,因爲它,我想提出一個POST請求,並res.download()僅適用於GET請求工作
以下應工作:
$http.post("url_here", post_data_to_send, {responseType: 'arraybuffer'})
.success(function (data,status,headers) {
var blob = new Blob([data]);
var objectUrl = URL.createObjectURL(blob);
var a = document.createElement("a");
a.style = "display:none";
a.href = objectUrl;
a.download = headers().filename;
a.click();
console.log("Report downloaded");
}).error(function (err) {
console.log(err);
});
你可以這樣做直接在Client Side
上,您可能會遇到一些跨瀏覽器兼容性問題(最好的方法是始終通過服務器提供下載流,例如,用於大文件)。
// this example uses a JSON String
// but you can do it with any valid blob argument
const fileContent = [JSON.stringify(
['something', 'to', 'download'], null, 2
)];
const downloader = document.createElement('a');
// set the filename here
downloader.download = 'filename.json';
const blob = new Blob(fileContent, {type: 'text/plain'});
downloader.href = window.URL.createObjectURL(blob);
// trigger the download
downloader.click();
在我看來,一個重定向到下載資源的可能是最好的選擇。
參考這個答案在這裏 https://stackoverflow.com/questions/19327749/javascript-blob-filename-without-link#19328891 – Slytherin
重複問題的https: //stackoverflow.com/questions/31134961/downloading-excel-file-xlsx-in-angularjs-and-webapi – Kasiriveni