如何使用http在角度js中下载二进制文件

时间:2016-04-29 06:56:12

标签: angularjs

我想使用$ http下载exe文件,它在我控制数据时显示,但我无法下载。

$http({
        url: url,
        method: "GET",
        headers: {
           'Content-type': 'application/json'
        }
    }).success(function (data, status, headers, config) {
        console.log(data);

        window.open(objectUrl);
    }).error(function (data, status, headers, config) {
        //upload failed
    });

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:3)

您可以使用响应类型,如responseType:“arraybuffer”

$http({
    url: url,
    method: "GET",
    headers: {
       'Content-type': 'application/json'
    },
  responseType: "arraybuffer"
}).success(function (data, status, headers, config) {
    console.log(data);
   var file = new Blob([data], { type: 'application/binary' });
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
var link=document.createElement('a');
link.href=fileURL;
link.download="testing.exe";
link.click();
    window.open(objectUrl);
}).error(function (data, status, headers, config) {
    //upload failed
});

并使用Blob并传递类型“application / binary”并创建一个下载链接。

答案 1 :(得分:3)

  

鉴于代码将帮助您下载exe文件以及检查   浏览器兼容性。

var ieEDGE = navigator.userAgent.match(/Edge/g);
var ie = navigator.userAgent.match(/.NET/g); // IE 11+
var oldIE = navigator.userAgent.match(/MSIE/g); 

var blob = new window.Blob([data.data], { type: 'application/x-msdownload' });

if (ie || oldIE || ieEDGE) {

    var fileName="filename"+'.exe';
    window.navigator.msSaveBlob(blob, fileName);
}
else {

    var file = new Blob([ data.data ], {
        type : 'application/x-msdownload'
    });

    var fileURL = URL.createObjectURL(file);
    var a         = document.createElement('a');
    a.href        = fileURL; 
    a.target      = '_blank';
    a.download    = "filename"+'.exe';
    document.body.appendChild(a);

    a.click();

}
//Successfully Downloaded