umijs 下载文件

umijs项目中使用下载功能,
下载使用文件流方式
统一下载函数:path 接口地址,data:接口参数,modelName 自定义文件名


// download.ts
import { request } from 'umi';

const downloadData = async (path, data, modelName) => {
  const url = `/api/${path}/download`;
  const response = await request(url, {
    method: 'GET',
    params: { ...data },
    // ...(options || {}),
    responseType: 'arrayBuffer', // 或者responseType: 'blob'
  });
  if (response) {
    // 创建Blob对象,设置文件类型
    const { blob, fileName } = response;
    let objectUrl = URL.createObjectURL(new Blob([blob], { type: 'application/vnd.ms-excel' })); // 创建URL
    const link = document.createElement('a');
    link.href = objectUrl;
    link.download = modelName || fileName; // 自定义文件名
    link.click(); // 下载文件
    URL.revokeObjectURL(objectUrl); // 释放内存
  }
  return response;
};

export { downloadData };

入口app.tsx处增加拦截器,处理Content-Disposition

// app.tsx
// 响应拦截
request.interceptors.response.use(async (response) => {
  const disposition = response.headers.get("Content-Disposition"); // 获取Content-Disposition
  return disposition // 当Content-Disposition中有值的时候进行处理,其他请求的响应则放过
    ? {
        blob: await response.blob(), // 将二进制的数据转为blob对象,这一步是异步的因此使用async/await
        fileName: decodeURI(disposition.split(";")[1].split("filename=")[1]), // 处理Content-Disposition,获取header中的文件名
      }
    : response;
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值