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 分钟前
C++ 中 std::deque 的原理?它内部是如何实现的?
开发语言·c++·stl
A_nanda13 分钟前
Vue项目升级
前端·vue3·vue2
SuperEugene23 分钟前
Axios 接口请求规范实战:请求参数 / 响应处理 / 异常兜底,避坑中后台 API 调用混乱|API 与异步请求规范篇
开发语言·前端·javascript·vue.js·前端框架·axios
abigale031 小时前
【浏览器 API / 网络请求 / 文件处理】前端文件上传全流程:从基础上传到断点续传
前端·typescript·文件上传·vue cli
子兮曰1 小时前
Bun v1.3.11 官方更新全整理:新增功能、关键修复与升级验证
javascript·node.js·bun
Setsuna_F_Seiei1 小时前
AI 对话应用之页面滚动交互的实现
前端·javascript·ai编程
xuxie991 小时前
N11 ARM-irq
java·开发语言
新缸中之脑2 小时前
追踪来自Agent的Web 流量
前端
wefly20172 小时前
从使用到原理,深度解析m3u8live.cn—— 基于 HLS.js 的 M3U8 在线播放器实现
java·开发语言·前端·javascript·ecmascript·php·m3u8
luanma1509802 小时前
PHP vs C++:编程语言终极对决
开发语言·c++·php