我正在使用角度1.2.27,我正在尝试下载文件。它在chrome上工作得很完美但在FF上没有任何反应,请求返回200 / ok并且成功代码运行,但就是这样,没有下载文件:
var fileLoaded = $q.defer();
$http.get(url, { responseType: 'arraybuffer' })
.success(function (data,status,hdr) {
var cd = hdr('Content-Disposition').split(';');
var fileName = '';
_.forEach(cd,function(d){
if(d.trim().indexOf('filename') >= 0){
fileName = d.split('=')[1].replace(/[\"]/g,'');
return false;
}
});
var file = new Blob([data]);
var wurl = $window.URL || $window.webkitURL;
var fileURL = wurl.createObjectURL(file);
console.log( 'fileURL:' , fileURL );
var a = document.createElement("a");
a.href = fileURL;
a.download = fileName;
a.target = "_self";
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
wurl.revokeObjectURL(fileURL);
fileLoaded.resolve(true);
}).error(function (data) {
// console.error(data);
fileLoaded.reject(data);
});
return fileLoaded.promise;
}
我看到的唯一区别是当我记录fileURL
时。在chrome上它看起来像这样:
blob:http%3A//localhost%3A9000/e869aa88-8190-4d9d-a379-9ad977a09613
就像这样的FF:
blob:http://localhost:9000/f36b7773-00bb-4ade-87be-8f197c41ccf8
但我认为这只是一个控制台的事情。
知道我做错了什么?
答案 0 :(得分:0)
在此提供答案以供参考。使用来自@Satpal评论的FileSaver,我能够轻松解决它:
var fileLoaded = $q.defer();
$http.get(url, { responseType: 'arraybuffer' })
.success(function (data,status,hdr) {
var cd = hdr('Content-Disposition').split(';');
var fileName = '';
_.forEach(cd,function(d){
if(d.trim().indexOf('filename') >= 0){
fileName = d.split('=')[1].replace(/[\"]/g,'');
return false;
}
});
var file = new Blob([data]);
saveAs(file, fileName);
fileLoaded.resolve(true);
}).error(function (data) {
// console.error(data);
fileLoaded.reject(data);
});
return fileLoaded.promise;
}