JavaScript:如何从二进制字符串创建Blob?

4

我想从我的备份中下载一个受保护的文件 - 我必须发送授权头,所以我不能直接链接它。我已经创建了以下Ajax请求来下载它:

Ember.$.ajax({
     url: self.get("file.filepath"),
     type: "GET",
     beforeSend: function(xhr) {
        xhr.setRequestHeader(header, content);
     },
     processData: false,
     success: function (result, a, xhr) {
         var blob = new Blob([result], {type: xhr.getResponseHeader("content-type") || ""});
         saveAs(blob, self.get("file.filename"));
     }
});

在处理文本文件时一切正常。但是当我尝试下载二进制文件(图片)时,我得到的是完全无用的东西(即使响应中的二进制字符串在控制台上打印出来对我来说似乎是正确的)。因此,我认为构建blob存在问题。

我尝试过使用Int8Array,但这并没有帮助。我做错了什么?


4
尝试使用XMLHttpRequest,将responseType设置为"blob",并使用URL.createObjectURL()。请参考https://dev59.com/mmcs5IYBdhLWcg3waTND。 - guest271314
非常感谢 - 这个有效! - yaqwsx
2个回答

0

今天我遇到了同样的问题,那是一个Angular代码,但也许其中的一些内容能对你有所帮助。

return $http({
    url: host + "api/map/rectangleMap",
    method: 'POST',
    data: angular.toJson(coords),
    responseType: 'blob',
    transformResponse: function(data){
        return new Blob([data], {type: 'image/png'});
    }
});

0

在guest271314的答案中有一个正确的答案 - 解决方案链接。这是我能找到的唯一有效的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接