转换后的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" });