vue element admin 中使用文件下载

最近直接套了vue element admin上在写项目在下载文件时遇到了问题,现在记录下解决办法

由于使用了统一的接口设置,所有返回的数据都会在request.js中进行提前的过滤和筛选,所以需要前后端(都是我自己)一起协商解决这个问题

1,后台返回是设置自定义的headers,用来标记这是个文件,并且设置这个headers可见

 response.setHeader("requestType","file");  // 自定义的header
 response.setHeader("Access-Control-Expose-Headers", "requestType"); //设置这个header 可见

2,如果请求跨域了 ,转发时需要注意设置例如nginx 默认不会转发自定义的headers的 需要进行设置(我这里是在nginx中设置所有的headers)

   add_header 'Access-Control-Allow-Headers' '*';

3,前端接收到请求以后需要先依据自定义的heade进行过滤,直接直接返回到相应的方法中进行处理例如在request.js中处理的部分添加判断:

if (response.headers.requesttype === 'file') {
      return response;
    }

4,到这里就已经获取到了数据流只需要网上的方法进行保存就行了

downloadFile(row) {
      downloadFile(row.id)
        .then(response=>{
          console.info("文件下载")
          var blob = new Blob([response.data], {
            type: "application/file",
          });
          var url = window.URL.createObjectURL(blob);
          var a = document.createElement("a");
          a.href = url;
          a.download = row.fileName; // 文件名称需要自己定义。如果需要知道也可以在header中自定义一个文件名称返回 也可以随机生成一个 我这里是已经提前知道了文件名
          a.click();
          Message({
            message: row.fileName+'已下载',
            type: "success",
            duration: 5 * 1000,
          });
        })
        .catch((response) => {
          Message({
            message: response.msg,
            type: "error",
            duration: 5 * 1000,
          });
        });
    },

我写这部分经历有些坎坷,开始查询页面如何进行文件存储,然后查询自定义header获取,然后查询nginx跨域headers的设置,然后查询自定义header为什么取不到

5、补充一下在请求的时候需要标记responseType

要不然返回的文件会不一致

export function downloadKeyFile(param) {
  return request({
    url: '/terminal/downloadKeyFile',
    method: 'post',
    data: param,
    responseType: 'blob' // 表明返回服务器返回的数据类型
  })
}

资料查询:vue 文件下载_zzqz的博客-CSDN博客_vue 网络文件下载

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
vue element admin使用mock的步骤如下: 1. 在项目的src/api文件夹下创建一个charts.js文件,添加getindexMock方法,该方法用于发送请求获取数据。具体代码如下: ```javascript import request from '@/utils/request' export function getindexMock(params) { console.log(params) return request({ url: '/charts/one', method: 'get', params }) } ``` 2. 在项目的mock文件夹下创建一个charts.js文件,用于创建mock接口。具体代码如下: ```javascript import Mock from 'mockjs' export default [ { url: '/charts/one', type: 'get', response: _ => { return { code: 20000, xdata: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'], ydata: [820, 932, 901, 934, 1290, 1330, 1320] } } } ] ``` 3. 找到mock文件夹里的index.js文件,在该文件调用charts.js。具体代码如下: ```javascript import chartsMock from './charts' export default [ ...chartsMock ] ``` 4. 在需要使用mock数据的页面引入getindexMock方法,然后调用该方法获取数据,并将数据绑定到页面上的图表。具体代码如下: ```javascript import { getindexMock } from "@/api/charts"; // 在需要使用数据的地方调用getindexMock方法 getindexMock().then(response => { this.chart.setOption({ xAxis: { type: "category", data: response.xdata // 绑定x轴数据 }, yAxis: { type: "value" }, series: [ { type: "line", data: response.ydata // 绑定y轴数据 } ] }); }); ``` 通过以上步骤,你就可以在vue element admin使用mock来模拟数据了。123 #### 引用[.reference_title] - *1* *3* [Vue Element Admin 用mock模块模拟数据](https://blog.csdn.net/Hero_rong/article/details/102952251)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] - *2* [Vue Element Admin 使用mock模块模拟数据](https://blog.csdn.net/qq_43081842/article/details/100150327)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}} ] [.reference_item] [ .reference_list ]
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值