[英]How to make browser to download file using angular Resource?
我有一個 API 服務,它用一個 XLS 文件的緩沖區數組進行響應,並且請求是從 Angular 客戶端發送的。 如何將響應保存為 XLS 文件?
在這里,我有在 IE11、Firefox 和 Chrome 上測試過的可行解決方案。
首先定義一個存儲庫來獲取文件:
'use strict';
(function() {
var factory = function($resource) {
return $resource('api/file/:id', {}, {
'get': {
method: 'GET',
responseType: 'arraybuffer',
transformResponse: function(data, headersGetter) {
return {
data: data,
headers: headersGetter
}
}
}
});
};
factory.$inject = ['$resource'];
var app = angular.module('yourAppModuleName');
app.factory('FileRepository', factory);
})();
現在我們可以在我們的控制器中調用FileRepository.get
方法。 但請記住,在 IE、Firefox 和 Chrome 中應以不同的方式處理文件下載。
DocumentRepository.get({
id: myFileId
}).$promise.then(
function(result) {
const blob = new Blob([new Uint8Array(result.data)], {
type: result.headers('Content-Type')
});
if (window.navigator.msSaveOrOpenBlob) { // for IE
//msSaveBlob only available for IE & Edge
window.navigator.msSaveBlob(blob, "myFileName");
} else {
const URL = window.URL || window.MozURL || window.webkitURL || window.MSURL || window.OURL;
var anchor = document.createElement('a');
anchor.href = URL.createObjectURL(blob);
anchor.download = 'myFileName';
document.body.appendChild(anchor); //For FF
anchor.target = '_blank';
anchor.click();
//It's better to remove the elem
document.body.removeChild(anchor);
}
}, function(error) {
log.error("Error downloading file: ", error);
});
如果您的服務器發送正確的標頭信息,如Content-Type: application/vnd.ms-excel
和Content-Disposition: attachment; filename="xyz.xls"
Content-Disposition: attachment; filename="xyz.xls"
,那么你可以使用$http
服務提供下載:
$http.get('myPath/file.xls', {
responseType: 'arraybuffer'
}).then(function(res) {
var blob = new Blob(
[res.data], { type: res.headers('Content-Type') }
),
url = URL.createObjectURL(blob),
a = document.createElement('a');
a.href = url;
a.download = 'your_download';
a.target = '_blank';
a.click();
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.