我正在尝试在下载空文件时向用户发送警报(在这种情况下,服务器会发回数字 0:
$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
文件类型。两者都不起作用。提前致谢。
编辑:我想也许我需要得到原始响应(对于这个 Angular $http 服务),所以我尝试了:
http.get(service, {
transformResponse:
function (d, h) {
return d;
}
})
.success(function (response) {
..same as above
});
仍然无法正常工作。事实上,我在
d
上设置了一个断点,看起来很多“无法识别”的字符都变成了问号(我将 d
与我的网络选项卡进行了比较。)在网络选项卡中,这些字符是一种方式,但是当我检查 d
时它们已更改为问号。
最佳答案
从 $http.get
返回的响应是一个包含 header 的对象,您不能直接从中形成 blob。您可以像这样访问服务返回的二进制内容:
var blob = new Blob([response.data], { type: "application/vnd.ms-excel" });
关于javascript - 转换后的 blob 正在获取格式不正确的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31523061/