javascript - 转换后的 blob 正在获取格式不正确的文件

标签 javascript angularjs excel

我正在尝试在下载空文件时向用户发送警报(在这种情况下,服务器会发回数字 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/

相关文章:

javascript - 执行单行代码后解决 Promise

javascript - 动态添加元素上的 Hammer.js 事件

javascript - 限制 AngularJS 中的分页

excel - 镜像片材之间的单元格范围

javascript - 使用 JavaScript 获取 DIV 的内容

javascript - 如何使用 WebGl 在 Canvas 上呈现二进制数据?

javascript - Angular Directive(指令)可以需要自己的 Controller 吗?

javascript - 为什么从 AngularJS Controller 内部加载时 google graph 不工作。浏览器变白,控制台没有任何错误

具有不同工作表的Excel填充句柄功能

vba - 如何在 VBA 中处理工作表(unicode VBA 显示和处理)中西里尔字母引起的错误(#REF)?