Javascript 从 Web 服务返回文件

Javascript return file from web service

本文关键字:返回 文件 服务 Web Javascript      更新时间:2023-09-26

我正在尝试使用javascript从Web服务下载文件。Web 服务以 JSON 字符串的形式返回数据,格式如下:

{
    "status": "OK",
    "encodedFile": "AAAAX3JlbHMvLnJlbHOtksFOwzAMhu99iij31d2QEEJNd0FIu01oPEBI3DZqE0eJB+XtiZAQDDHYgWOS358/W2m3i5/FM6bsKCi5rhspMBiyLgxKPh7uVzdy21VV+4Cz5pLJo4tZlKKQlRyZ4y1ANiN6nWuKGMpLAAAAX3JlbHMvLnJlbHOtksFOwzAMhu99iij31d2QEEJNd0FIu01oPEBI3DZqE0eJB+XtiZAQDDHYgWOS358/W2m3i5/FM6bsKCi5rhspMBiyLgxKPh7uVzdy21VV+4Cz5pLJo4tZlKKQlRyZ4y1ANiN6nWuKGMpL"
}

编码文件是来自 Web 服务的文件字节的 Base64 编码形式。Web 服务获取服务器中的文件,将文件转换为字节数组,然后使用 Base64 将字节数组编码为字符串,并以 JSON 格式返回响应,以便 javascript 获取字符串。获取字符串并对其进行解码(我获取文件的字节数)后,如何将其(字节数)作为文件下载返回?基本上,现在我有文件的字节数,我想将其返回为文件下载。

我正在使用jquery ajax来获取响应,获取"状态"并获取"编码文件"。任何帮助或建议将不胜感激。提前谢谢你。

首先,我们可以获取 Base64 编码的 blob 并对其进行解码。然后,我们获取生成的字符串,将其强制转换为无符号的 8 位字节数组(应该是),并从字节创建一个 blob。最后,我们为此 Blob 创建一个 URL,并为其设置 window.location(尽管你可能希望在单独的选项卡中打开 Blob)。

var data = atob("AAAAX3JlbHMvLnJlbHOtksFOwzAMhu99iij31d2QEEJNd0FIu01oPEBI3DZqE0eJB+XtiZAQDDHYgWOS358/W2m3i5/FM6bsKCi5rhspMBiyLgxKPh7uVzdy21VV+4Cz5pLJo4tZlKKQlRyZ4y1ANiN6nWuKGMpLAAAAX3JlbHMvLnJlbHOtksFOwzAMhu99iij31d2QEEJNd0FIu01oPEBI3DZqE0eJB+XtiZAQDDHYgWOS358/W2m3i5/FM6bsKCi5rhspMBiyLgxKPh7uVzdy21VV+4Cz5pLJo4tZlKKQlRyZ4y1ANiN6nWuKGMpL")
var bytes = new Array(data.length);
for (var i = 0; i < data.length; i++) {
    bytes[i] = data.charCodeAt(i);
}
bytes = new Uint8Array(bytes);
var blob = new Blob([bytes]);
window.location = URL.createObjectURL(blob);