如何使用 axios 下载包含多种类型文件的 zip

Oto*_*man 3 javascript vue.js axios

在我的 vueJs 应用程序中,我有以下 axios POST api 调用,该调用应该返回我希望保存在 .zip 文件夹中的多个文件。但是,当我使用以下 axios 方法时,我无法打开我的 zip,并且出现错误,提示“myfolder.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);
        });
Run Code Online (Sandbox Code Playgroud)

编辑:我尝试了 tony19 的答案,但仍然遇到相同的错误。不确定这是否有任何帮助,但我想获得多个 xml 和 sql 文件。

编辑2:这是我的console.log()中的response.data的打印: 在此输入图像描述

ton*_*y19 6

在这一行中:

const url = window.URL.createObjectURL(new Blob([response])); // DON'T DO THIS
                                                 ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

...您正在为整个Axios 响应对象(包括 HTTP 状态代码、标头等)的 blob 创建一个对象 URL ,但您实际上希望data其中的属性如下所示:

const url = window.URL.createObjectURL(new Blob([response.data]));
Run Code Online (Sandbox Code Playgroud)