js/axios/umi-request 根据后端返回的二进制流下载文件

javascript 复制代码
type ResponseType = {
  data: Blob;
  headers: {
    'content-disposition'?: string;
  };
};
// 下载 (创建a标签)
export const downloadBlob = (response: ResponseType) => {
  const blob = response.data; // 获取响应中的 Blob 数据
  const contentDisposition = response.headers['content-disposition'];
  let fileName = ''; // 默认文件名
  if (contentDisposition) {
    // 提取文件名并解码成中文
    const fileNameRegex = /filename=([^;]+)/;
    const fileNameMatch = contentDisposition.match(fileNameRegex);
    fileName = fileNameMatch ? fileNameMatch[1] : '';
    if (fileName) {
      fileName = decodeURIComponent(fileName);
    }
  }
  // 创建 Blob 对象后,你可以根据需要执行文件下载逻辑
  const url = window.URL.createObjectURL(blob);
  const link = document.createElement('a');
  link.href = url;
  link.download = fileName; // 设置下载文件的名称
  link.style.display = 'none';
  document.body.appendChild(link);
  link.click();
  // 清除创建的链接
  window.URL.revokeObjectURL(url);
  document.body.removeChild(link);
};

用法很简单。

javascript 复制代码
  const downLoad= async () => {
    const response = await axios(...);
    //将完整的响应头丢进去即可
    aDownload(response);
  };
相关推荐
前端不太难4 分钟前
Vue 项目路由 + Layout 的最佳实践
前端·javascript·vue.js
Jolyne_4 分钟前
个人积累的一些前端问题解决方案(理论或实践,持续更新....)
前端
摆烂z6 分钟前
maven中打包不打全部包+多线程打包
java·开发语言·maven
程序员祥云7 分钟前
港股证劵 社招 一面
前端·面试
bj_zhb7 分钟前
Python 内置的 HTTP 服务
开发语言·python·http
贺今宵10 分钟前
安装java环境,安装jdk,jre,配环境win11
java·开发语言
qq_47837751510 分钟前
python cut_merge video, convert video2gif, cut gif
java·前端·python
雾岛听蓝11 分钟前
C++类和对象(三):核心特性与实战技巧
开发语言·c++
SmoothSailingT15 分钟前
C#——Interface(接口)
开发语言·c#·接口
利刃大大15 分钟前
【JavaSE】十九、JVM运行流程 && 类加载Class Loading
java·开发语言·jvm