美文网首页
vue下载数据流文件

vue下载数据流文件

作者: 苦咖啡Li | 来源:发表于2020-05-08 17:51 被阅读0次

日常开发中我们常常需要下载文件,但是后端返回给前端需要下载的文件大致有两种:一种url链接,另一种文件流的形式;

1、前端下载url链接文件

方法1、通过a标签的href直接下载
<a href="https://www.baidu.com/img/bd_logo1.png" download="logo"></a>
方法2、通过 window.open(url) 直接下载
window.open("https://www.baidu.com/img/bd_logo1.png")

2、前端处理 文件流 文件

针对文件流文件,前端需要进行文件类型,blob处理以后通过动态创建a标签的形式下载

Blob对象处理

MDN上描述:Blob 对象表示一个不可变、原始数据的类文件对象。Blob 表示的不一定是JavaScript原生格式的数据。 要从其他非blob对象和数据构造一个 Blob,请使用 Blob() 构造函数

MDN-Blob.png

需要利用Blob()构造函数构建一个blob对象,axios请求例子:

axios.get( url, params ).then((res) => {
    const data = res.data;
    const url = window.URL.createObjectURL(new Blob([data], {
        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    }))
    const a = document.createElement('a')
    a.style.display = 'none'
    a.href = url
    a.setAttribute('download', 'excel.xlsx')
    document.body.appendChild(a)
    a.click()
    document.body.removeChild(a) 
    this.dialogInfo.dialogVisible = false
 
}).catch((err) => {
  console.log(err.message);
});

注意:上面的方法虽然可以下载文件,但是下载下来的文件是乱码,甚至打开文件出错。


file-error.png

花了一个上午的时间找问题,结果接口链接直接在浏览器中,通过a标签下载都能直接打开并下载文件,且文件数据没有任何问题。但是通过axios请求拿到的数据浏览器不识别,且通过blob和动态创建a标签不能下载正确的文件内容,百思不得其解。。。

后来发现是参数 responseType 的问题,responseType 它是服务器响应的数据类型,由于后台返回来的是二进制数据,所以我们要把它设为arraybuffer或者blob

axios.get(url, {
    params, 
    responseType: 'arraybuffer'
}).then((res) => {
    const data = res.data;
    const url = window.URL.createObjectURL(new Blob([data], {
        type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
    }))
    const a = document.createElement('a')
    a.style.display = 'none'
    a.href = url
    a.setAttribute('download', 'excel.xlsx')
    document.body.appendChild(a)
    a.click()
    document.body.removeChild(a) 
    this.dialogInfo.dialogVisible = false
 
}).catch((err) => {
  console.log(err.message);
});

最后发现文件数据下载成功,文件能够直接打开且数据内容没有问题


file-success.png

相关文章

  • vue下载数据流文件

    日常开发中我们常常需要下载文件,但是后端返回给前端需要下载的文件大致有两种:一种url链接,另一种文件流的形式; ...

  • vue学习第一天笔记

    VUE 下载和安装vue官网npm下载vue模块:npm install vue下载完后使用里面的vue.js文件...

  • wangEditor4

    1.下载 vue文件

  • vue循环下载多个文件

    vue循环下载多个文件

  • vue项目使用 富文本插件

    下载 npm i vue-ueditor-wrap -S下载 UEditor 文件放到 public 文件下面 ...

  • echarts 立体柱形图

    如图: 下载echarts:版本如下: vue文件:

  • vue文件下载

    需求:vue直接下载后台返回Excel文件 请求后台文件的时候需加入responseType:'applicati...

  • Vue 中的双向数据绑定

    双向绑定 单向数据流 双向绑定 or 单向数据流 Vue 是单向数据流,不是双向绑定 Vue 的双向绑定是语法糖 ...

  • vue第一天总结

    1.下载并且安装vue.js,输入指令 upm install vue,下载成功之后出现文件即可。 vue相对于A...

  • vue 日常使用

    一. vue 使用 pdf 插件 使用Vue Cli生成项目 下载pdf.js 解压下载后的文件,将文件夹里面的b...

网友评论

      本文标题:vue下载数据流文件

      本文链接:https://www.haomeiwen.com/subject/qncvwhtx.html