使用Blob从Ajax结果下载文件

2021/01/30 23:11 · jquery ·  · 0评论

我使用此代码从服务器下载excel文件。

$.ajax({
    headers: CLIENT.authorize(),
    url: '/server/url',
    type: 'POST',
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(jsonData),
    success: function (data) {
        alert('Data size: ' + data.length);
        var blob = new Blob([data], { type: "application/vnd.ms-excel" });
        alert('BLOB SIZE: ' + data.length);
        var URL = window.URL || window.webkitURL;
        var downloadUrl = URL.createObjectURL(blob);
        document.location = downloadUrl;
    },
});

我遇到的问题是,即使数据和Blob大小相同,当document.location被分配时,系统仍会提示我下载几乎两倍大的excel文件。当我尝试打开它时,excel会抱怨文件格式错误,并且即使所需的文本仍然存在,打开的文件也包含很多垃圾。

任何想法是什么原因造成的,以及如何避免呢?

因此,我使用AJAX 2解决了该问题。它本身支持二进制流。除非您对所有内容进行base64编码,否则您不能为此使用jQuery。

工作代码如下所示:

var xhr = new XMLHttpRequest();
xhr.open('POST', '/le/url', true);
xhr.responseType = 'blob';
$.each(SERVER.authorization(), function(k, v) {
    xhr.setRequestHeader(k, v);
});
xhr.setRequestHeader('Content-type', 'application/json; charset=utf-8');
xhr.onload = function(e) {
    preloader.modal('hide');
    if (this.status == 200) {
        var blob = new Blob([this.response], {type: 'application/vnd.ms-excel'});
        var downloadUrl = URL.createObjectURL(blob);
        var a = document.createElement("a");
        a.href = downloadUrl;
        a.download = "data.xls";
        document.body.appendChild(a);
        a.click();
    } else {
        alert('Unable to download excel.')
    }
};
xhr.send(JSON.stringify(jsonData));

希望这可以帮助。

本文地址:http://jquery.askforanswer.com/shiyongblobcongajaxjieguoxiazaiwenjian.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!