vue.js - axios 下载带有原始正确扩展名的文件

标签 vue.js download axios blob vuex

我有以下用于下载文件的 vuex 方法:

   downloadFile(context, url) {
      return new promise((resolve, reject) => {
        const method = "GET";
        axios
          .request({
            url: url,
            method,
            responseType: "blob"
          })
          .then(response => {
            let fileURL = window.URL.createObjectURL(
              new Blob([response.data]),
              {
                type: response.headers["content-type"]
              }
            );
            let fileLink = document.createElement("a");
            fileLink.href = fileURL;
            let fileName = response.headers["content-disposition"].split(
              "filename="
            )[1];
         
            fileLink.setAttribute("download", fileName);
            document.body.appendChild(fileLink);

            fileLink.click();
            fileLink.remove();
            resolve();
          })
          .catch(() => {
            reject();
          });
      });
    }

我传递 URL 链接(从 Laravel API 获取)

Blockquote

下载文件总是以txt扩展名的问题

Blockquote

有什么方法可以获取文件扩展名吗? enter image description here

最佳答案

您的服务器未发送屏幕截图中的文件扩展名。如果它不在 downloadFileurl 参数中,并且您无法修复服务器响应以包含它,则可以从 Content-Type 中推断出它>。您可以创建一个哈希,将每个内容类型链接到扩展。

删除这个:

let fileName = response.headers["content-disposition"].split(
   "filename="
)[1];

将其替换为以下内容以捕获扩展名:

const extensions = {
  'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',
  'application/fake': 'fake', // Just an example
  // etc. Add another line for every Content-Type
}
const contentType = response.headers["Content-Type"];
const extension = extensions[contentType];
const filename = 'file.' + extension;

这将命名每个文件“file.

关于vue.js - axios 下载带有原始正确扩展名的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64941975/

相关文章:

laravel - 如何在 Laravel Dusk 测试中关闭控制台打印?

jquery - Vuejs 禁用了选定的下拉选项?

jquery - 根据 Laravel Vue Js Api 中的关系从多个表中删除数据

api - 使用Axios进行API调用时Express中的错误处理

javascript - axios中POST请求中发送参数

vue.js - 无法获取宿主组件中组件的 DOM 事件

javascript - vue.js 组件内联样式串联

c++ - 下载前如何获取文件大小

java - 安装时自动从 Sourceforge 下载

java - 应用程序下载网页不工作