vue接收文件流并下载

直接上代码

// responseType: 'blob' 很重要,这里举例为post请求
axios.post(url,params,{responseType: 'blob'})
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });
// 前端接收并下载
  download(param).then(res => {
      console.log(res, "返回数据");
      // 创建blob对象,type注意与后端返回的文件类型保持一致,这里是doc,docx 类型的
      // type也可以不填
      var blob = new Blob([res.data], { type: 'application/msword;charset=utf-8' });
      let url = window.URL.createObjectURL(blob);//生成一个Blob URL
      console.log(url)
      let link = document.createElement('a');
      link.style.display = 'none';
      link.href = url;
      link.setAttribute('download','下载文件.doc');// 给下载框的下载文件名赋值
      document.body.appendChild(link);
      link.click() //模拟在按钮上的一次鼠标单击
      URL.revokeObjectURL(link.href); // 释放URL 对象
     })
### Vue.js 文件下载的实现方法与示例代码 在 Vue.js 中实现文件下载通常涉及前端向后端发送请求以获取文件流将其转换为浏览器可识别的格式进行下载。以下是具体的实现方式和示例代码。 #### 示例代码:通过 Axios 获取文件流触发下载 以下是一个完整的示例,展示了如何使用 Axios 从后端获取文件流前端触发文件下载[^1]。 ```javascript <template> <button @click="downloadFile">下载文件</button> </template> <script> import axios from 'axios'; export default { methods: { downloadFile() { axios({ url: 'https://example.com/api/download', // 替换为实际的后端接口地址 method: 'GET', responseType: 'blob', // 必须设置为 blob 类型 }).then((response) => { const url = window.URL.createObjectURL(new Blob([response.data])); const link = document.createElement('a'); link.href = url; link.setAttribute('download', 'filename.ext'); // 设置下载的文件名 document.body.appendChild(link); link.click(); link.remove(); // 下载完成后移除链接元素 }).catch((error) => { console.error('下载失败:', error); }); } } }; </script> ``` #### 注意事项 - `responseType: 'blob'` 是关键配置,用于告诉 Axios 以二进制大对象(Blob)的形式接收响应数据。 - 文件名可以通过后端返回的响应头 `Content-Disposition` 提取,或者直接在前端指定。 - 如果需要支持跨域请求,请确保后端正确配置了 CORS 策略[^3]。 #### 后端接口要求 后端接口需要返回文件流设置正确的响应头。例如,在 Node.js 的 Express 中可以这样实现[^5]: ```javascript const express = require('express'); const app = express(); app.get('/api/download', (req, res) => { const filePath = './example.pdf'; // 替换为实际文件路径 res.download(filePath, 'example.pdf', (err) => { if (err) { res.status(500).send('文件下载失败'); } }); }); app.listen(3000, () => { console.log('服务器已启动,监听端口 3000'); }); ``` #### 处理常见错误 如果在实现过程中遇到问题,可以参考以下解决方法: - **CORS 错误**:确保后端允许跨域请求,正确设置了 `Access-Control-Allow-Origin` 响应头[^3]。 - **文件无法下载**:检查后端是否正确返回了文件流以及前端是否正确处理了响应数据。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值