Javascript 从网络服务返回文件

标签 javascript jquery json download

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

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

encodedFile 是来自 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);

关于Javascript 从网络服务返回文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27310142/

相关文章:

php - jQuery:按钮点击触发多次

javascript - 使用 lodash 的 _sortBy 按不同字段对数组进行排序

javascript - 使用 Angular js 指令使用 Highcharts 呈现多个图表

javascript - 如何将变量插入jquery select属性 $ ("[myAttribute=' +myAttribute +']").html ('is working' );

php - 在jquery中发送多个数据

c++ - Docker 远程 API JSON 架构定义

javascript - 过滤器 es6 接受函数作为条件

javascript - 在执行交换源的脚本后,单击按钮时需要 JavaScript 将图像源重置回原始状态

javascript - 我什么时候应该在 knockout 中使用括号

javascript - 将 JSON 转换为强类型对象