服务器响应数据如下:
我的角度代码:
$scope.export = function() {
var datas = new Blob([data], { type: 'application/vnd.ms-excel;charset=UTF-8' });
FileSaver.saveAs(datas, '2016-04-20.xlsx');
}
和标题:
Accept-Range:bytes
Connection:keep-alive
Content-Disposition:attachment; filename=%E8%A1%A5%E8%B4%B4%E8%B5%84%E6%A0%BC%E5%B7%B2%E5%AE%A1%E6%A0%B8%E4%BF%A1%E6%81%AF%E8%A1%A8.xlsx
Date:Tue, 19 Apr 2016 17:23:06 GMT
Transfer-Encoding:chunked
X-Powered-By:Express
依赖关系 角, FileSaver.js, Blob.js
但我得到了错误的文件,无法打开,我该如何解决这个问题?谢谢!
答案 0 :(得分:1)
我有类似的问题。我能够从第三个工具(例如Postman)获得有效文件,但不能从我自己的代码中获取。
我想我忘了在我的HTTP请求中将responseType
设置为blob
。
这似乎是正确读取二进制数据所必需的。
示例:
$http({
url: 'your/webservice',
method: "POST",
data: json, //this is your json data string
headers: {
'Content-type': 'application/json'
},
responseType: 'blob'
}).success(function (data, status, headers, config) {
var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
}).error(function (data, status, headers, config) {
//upload failed
});
代码来自this answer。