转换后的blob获取的文件格式不正确
我正试图发送一个警告,当一个空文件被下载(服务器发回数字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
文件types。 两者都没有工作。 提前致谢。
编辑:我想也许我需要得到原始的响应(对于这个angular$ http服务),所以我试过了:
http.get(service, { transformResponse: function (d, h) { return d; } }) .success(function (response) { ..same as above });
仍然没有工作。 事实上,我把一个断点放在d
,看起来很多“无法识别的”字符正在被改为问号(我将d
与我的networking选项卡进行比较)。在networking选项卡中,字符是一种方式,但是当我检查他们是否被改为问号。
从$http.get
返回的响应是一个包含标题的对象,不能直接从它构成一个blob。 你可以像这样访问服务返回的二进制内容:
var blob = new Blob([response.data], { type: "application/vnd.ms-excel" });