在反应中,我正在根据 John Culviner 中提到的解决方案测试我的文件下载这个帖子
axios.post('api/downloadMyFile',
data
).then((response) => {
const url = window.URL.createObjectURL(new Blob([response.data]))
const a = document.createElement('a');
a.href = url;
a.download = "test.zip"
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
}).catch((err) => {
}
So file test.zip
正在下载。但是当我保存后尝试打开它时,我在 Windows 中收到压缩 Zip 文件夹错误。
另外,我注意到我不需要在行中指定文件名a.download = "test.zip"
因为网络服务正在从共享存储获取文件并且它已经有一个名称。
所以在这种情况下,我是否需要将文件名也包含在response
目的?就像是response.filename
这样我就可以在下面的行中使用它,而不是手动命名它:
a.download = response.filename
The response.data
从 axios 返回的是一个 JSON 字符串。因此,从该 JSON 创建 Blob 不会生成正确的对象。来自 Axios 文档:
// responseType
表示服务器将要传输的数据类型
回应
// 选项有:'arraybuffer'、'document'、'json'、
“文本”、“流”
// 仅浏览器:'blob'
响应类型:'json',
// 默认
简单的修复方法是告诉 Axios 以 a 的形式提供响应Blob
。然后URL.createObjectURL()
将生成格式正确的文件的 URL。
axios.post('api/downloadMyFile', data, { responseType: 'blob' })
.then(blob=>{
const url = window.URL.createObjectURL(blob.data);
const a = document.createElement('a');
a.href = url;
a.download = "download.zip"
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)