我有一个有角度的服务。我正在使用$ resource向我的API发送请求。 API正在发送一个应该下载的文件。我该如何保存?
注意:我的API已经发送了标题,使浏览器下载文件。
如果我直接从浏览器访问API,则会下载该文件。但是,如果我从$ resource访问API,则没有任何反应。
API:
jQuery(function($){
$('a[href="'+window.location.pathname+window.location.hash+'"]').parent().addClass('active');
});
答案 0 :(得分:1)
尝试提供文件名,如果其为json
类型,则相应地更改content-type
。
"Content-Type": 'application/json'
"content-disposition": "attachment;filename=fname.json"
答案 1 :(得分:1)
<强>更新强>
我已经为此找到了一个完整的工作解决方案,与旧答案不同,它适用于FF和IE:
var blob = new Blob([response], {type: 'text/json'});
// FOR IE:
if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob);
}
// For Other browsers (tested on Chrome, FF)
else{
var e = document.createEvent('MouseEvents'),
a = document.createElement('a');
a.download = filename;
a.href = window.URL.createObjectURL(blob);
a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
e.initEvent('click', true, false, window,
0, 0, 0, 0, 0, false, false, false, false, 0, null);
a.dispatchEvent(e);
}
旧回答:
感谢 topless 指导我找到合适的答案。以下是我的工作方式:
myService.exportData().$promise.then(function (response) {
var anchor = angular.element('<a/>');
anchor.attr({
href: 'data:attachment/json,' + encodeURI(JSON.stringify(response)),
target: '_blank',
download: 'exported logs.log'
})[0].click();
})
此外,现在我不需要在API端设置标头。
res.send(myFileText)
效果很好!
注意:不适用于IE&amp; SAFARI 强>