javascript - 如何使用 axios 下载包含多种类型文件的 zip
问题描述
在我的 vueJs 应用程序中,我有以下 axios POST api 调用,假设返回多个我希望保存在 .zip 文件夹中的文件。但是,当我使用以下 axios 方法时,我无法打开我的 zip,并且出现错误,提示“我的 folder.zip 无效”。
如何正确下载 response.data?
这是方法。我在原始调用正文中发送了一些需要的信息和一个需要上传的文件,以便我可以获取需要下载的其他文件。
upload() {
console.log("uploading")
let formData = new FormData();
let gerarMenus = "on";
let zipName= "test";
let var1= "on";
let var2= "on";
let var3= "on";
let var4= "on";
this.files.forEach((f,x) => {
formData.append('file'+(x+1), f);
});
formData.append('zipName', zipName);
formData.append('var1', var1);
formData.append('var2', var2);
formData.append('var3', var3);
formData.append('var4', var4);
axios
.post("/myUrl/downloadFile", formData)
.then((response) => {
console.log(response.data)
const url = window.URL.createObjectURL(new Blob([response]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', zipName+ '.zip');
document.body.appendChild(link);
link.click()}
).catch(e => {
console.error(e);
});
编辑:我尝试了 tony19 的回答,但我仍然得到同样的错误。不确定是否有帮助,但我想获得多个 xml 和 sql 文件。
解决方案
在这一行:
const url = window.URL.createObjectURL(new Blob([response])); // DON'T DO THIS
^^^^^^^^
...您正在创建一个指向整个Axios 响应对象(包括 HTTP 状态代码、标头等)的 blob 的对象 URL,但您实际上希望其中的data
属性如下所示:
const url = window.URL.createObjectURL(new Blob([response.data]));
推荐阅读
- vba - 如何将打印区域设置为行和列中的最后一个可见文本?
- php - 有没有办法从关闭函数中知道退出状态代码?
- vba - 一旦在 VBA 中设置了日期,如何设置变量的时间
- typescript - 摩纳哥编辑器 URI 用例?
- flutter - 我收到错误“无法加载 FastStringService”。我如何解决它?
- oracle - 如何在oracle中使用嵌套游标遍历同一张表
- html - 包含描述的按钮将隐藏在移动视图中
- php - PHP 编码类型
- javascript - 如何在 Discord.js 中成功更新 MongoDB 模式?
- php - Laravel 8 控制器无法识别 JavaScript 实用程序