2016-04-29 8 views
4

Я хочу использовать exla-файл downlaod с помощью $ http, он показывает мне, когда я утешаю данные, но я не могу его загрузить.Как загрузить двоичный файл в угловых js с помощью http

$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

вы можете использовать тип ответа, как 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 и передать тип «приложения/двоичный» и создать ссылку, чтобы загрузить его.

+0

что делать, если файл i огромный? Будет ли он загружен в память браузеров, когда мы будем использовать blob? –

+0

Почему бы просто не получить ответ прямо как капля? например 'responseType: 'blob'' -> https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/responseType –

2

Данный код поможет вам скачать 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 
Смежные вопросы