Angular - 保存传入文件以响应$ resource请求

时间:2016-04-13 07:23:58

标签: angularjs

我有一个有角度的服务。我正在使用$ resource向我的API发送请求。 API正在发送一个应该下载的文件。我该如何保存?

注意:我的API已经发送了标题,使浏览器下载文件。

如果我直接从浏览器访问API,则会下载该文件。但是,如果我从$ resource访问API,则没有任何反应。

API:

jQuery(function($){
    $('a[href="'+window.location.pathname+window.location.hash+'"]').parent().addClass('active');
});

2 个答案:

答案 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