我正在使用 angularjs http post 在单击按钮时从 Web Api 下载文件。我的代码在 Google Chrome 和 Firefox 中运行良好,但在 Internet Explorer 中不起作用。这是我的代码
$scope.CallApi = function () {
$http({
url: some url,
dataType: 'json',
method: 'POST',
data: null,
responseType: 'arraybuffer',
}).success(function (responsedata, status, xhr) {
var file = xhr('Content-Disposition');
console.log(file);
var filename = file.substr(21, 7);
$scope.value = responsedata;
var fileName = filename;
var blob = new Blob([responsedata], { type: "application/octet-stream" });
var url = URL.createObjectURL(blob);
var a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
a.href = url;
a.download = fileName;
}).error(function (error) {
alert("Error Found" + " : " + error);
});
};
以上代码在 IE 中不工作,我不想使用 FileSaver.js 扩展名有没有其他方法可以在 Internet Explorer 中从 api 下载文件。下面我附上了我在 Internet Explorer 中遇到的错误的屏幕截图.... 提前谢谢你......
最佳答案
这是一种在 IE 中下载的方法
if (window.navigator.msSaveOrOpenBlob){
// base64 string
var base64str = response;
// decode base64 string, remove space for IE compatibility
var newstr =base64str.replace(/\s/g, '');
var binary = atob(newstr);
// get binary length
var len = binary.length;
// create ArrayBuffer with binary length
var buffer = new ArrayBuffer(len);
// create 8-bit Array
var view = new Uint8Array(buffer);
// save unicode of binary data into 8-bit Array
for (var i = 0; i < len; i++) {
view[i] = binary.charCodeAt(i);
}
// create the blob object with content-type "application/csv"
var blob = new Blob( [view], { type: mimeType });
window.navigator.msSaveOrOpenBlob(blob, "Name your file here");
}
此处 mimeType 对您来说是 application/octet-stream,response 是您的 base64 字符串。
关于javascript - 如何使用 angular post 从 Internet Explorer 中的 webapi 下载文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37965807/