Javascript 转换的blob获取的文件格式不正确
我试图在下载空文件时向用户发送警报(在这种情况下,服务器会发回数字0:Javascript 转换的blob获取的文件格式不正确,javascript,angularjs,excel,Javascript,Angularjs,Excel,我试图在下载空文件时向用户发送警报(在这种情况下,服务器会发回数字0: $http.get(service) .success(function (response) { if (response === parseInt(response, 10)) { alert("That query had no results"); $("#dialog").dialog("close");
$http.get(service)
.success(function (response) {
if (response === parseInt(response, 10)) {
alert("That query had no results");
$("#dialog").dialog("close");
}
else {
var blob = new Blob([response], { type: "application/vnd.ms-excel" });
var objectUrl = URL.createObjectURL(blob);
$("#dialog").dialog("close");
window.location = objectUrl;
}
});
该文件正在下载,但当我打开它时,我从excel收到一条“文件格式不正确消息”。我知道excel文件正在正常下载,因为:
window.location = service
很好用
我试过两种方法:
application/vnd.ms-excel
application/vnd.openxmlformats-officedocument.spreadsheetml.sheet
文件类型。两种都不起作用。提前谢谢
编辑:我认为可能需要获得原始响应(对于这个$http服务),所以我尝试:
http.get(service, {
transformResponse:
function (d, h) {
return d;
}
})
.success(function (response) {
..same as above
});
但仍然不起作用。事实上,我在
d
上加了一个断点,看起来很多“无法识别”的字符都变成了问号(我将d
与我的网络选项卡进行了比较。)在网络选项卡中,字符是单向的,但当我选中d
时,它们已被更改为问号。从$http.get
返回的响应是一个包含标题的对象,您不能直接从中形成blob。您可以访问服务返回的二进制内容,如下所示:
var blob = new Blob([response.data], { type: "application/vnd.ms-excel" });