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

时间:2015-11-09 22:54:24

标签: javascript jquery ajax

我想从我的后台下载受保护的文件 - 我必须发送授权标头,所以我无法直接链接它。我创建了以下Ajax请求来下载它:

$(function() {

$.ajax({
    url: "http://linktoapi&callback=myMethod",
    timeout: 2000,
    jsonpCallback: "myMethod",
    jsonp: false,
    dataType: "jsonp",
    success: function(data) {
        var newContent = '';
        for (var i = 0; i < data.listing.length; i++) { 
            newContent += '<p class="property-details">' + '<a href="' + data.listing[i].listing_id + '">' + data.listing[i].displayable_address + '</a></p>';

        }
        $('#content').html(newContent).hide().fadeIn(400);
    },
    error: function() { 
        $content.html('<div class="container">Please try again soon.</div>');
    }
});




$('.property-details a').on('click', function(e) {
    e.preventDefault();
 $('#content').html("test").hide().fadeIn(400);
});

 });

处理文本文件时一切正常。然而,当我尝试下载二进制文件(图像)时,我得到完全不存在(即使通过控制台打印的响应中的二进制字符串对我来说似乎很好)。所以我认为blob构造存在问题。

我曾尝试使用Int8Array,但它没有帮助。我做错了什么?

2 个答案:

答案 0 :(得分:0)

今天我有同样的问题 这是一个角度代码,但也许有些东西可以帮助你

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'});
    }
});

答案 1 :(得分:0)

在guest271314的答案中有一个正确的答案 - link to solution.这是我能找到的唯一可行的解​​决方案。