gpt4 book ai didi

javascript - 使用 blob 从 ajax 结果下载文件

转载 作者:行者123 更新时间:2023-12-03 21:47:28 30 4
gpt4 key购买 nike

我使用此代码从服务器下载 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 解决了这个问题。它本身支持二进制流。显然,你不能使用 jQuery 来实现这一点,除非你对所有内容进行 Base64 编码。

工作代码如下所示:

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

希望这有帮助。

关于javascript - 使用 blob 从 ajax 结果下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29393601/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com