后端返回Blob文件流,前端实现导出

  1. 拦截器修改

    // 检查响应是否为blob类型
    if (response.data instanceof Blob) {
    return response;
    } else {
    // 正常对象
    if (res.returnCode == 200) {
    return res;
    } else {
    // 错处理
    }
    }

  2. 接口处理,返回数据类型设置为 responseType: "blob"

3.导出函数

复制代码
// 导出
    output() {
      let data = {};
      if (this.status) {
        data.status = this.status * 1;
      }
      downExcel(data).then((response) => {
        const disposition = response.headers["content-disposition"];
        let filename = this.parseFilenameFromDisposition(disposition);
        this.$message({
          message: "导出成功!",
          type: "success",
        });
        // 创建 Blob 对象
        const blob = new Blob([response.data]);
        // 创建下载链接
        const url = window.URL.createObjectURL(blob);
        const link = document.createElement("a");
        link.href = url;
        link.setAttribute("download", filename); // 设置下载文件名
        document.body.appendChild(link);
        link.click();
        // 清理DOM和对象URL
        document.body.removeChild(link);
        window.URL.revokeObjectURL(url);
      });
    },
  1. 解析后端在content-disposition中返回的文件名称

    parseFilenameFromDisposition(contentDisposition) {
    if (!contentDisposition) {
    return "download";
    }
    const filenameRegex =
    /(?:filename|fileName)[;=\n]*=((['"]).*?\2|[;\n]*)/;
    const matches = filenameRegex.exec(contentDisposition);
    if (matches && matches[1]) {
    // 提取文件名并去除引号
    let filename = matches[1].replace(/['"]/g, "");
    // 尝试解码URL编码的文件名
    try {
    filename = decodeURIComponent(filename);
    } catch (e) {
    console.warn("文件名解码失败:", e);
    }
    return filename;
    }
    return "download";
    },

相关推荐
Setsuna_F_Seiei1 天前
前端转型 Agent 开发 06 之 Agent Memory 记忆系统(让 Agent 更智能,更懂你)
前端·agent·ai编程
zhangzeyuaaa1 天前
Ruby 多线程、GVL(GIL)与 Mutex 完全指南
开发语言·前端·ruby
默_笙1 天前
🌊 向量库和 ES 都查不出"关系",我只好给奶茶建了一张人脉网
前端·javascript
优选资讯1 天前
标签打印软件怎么对接 Excel 数据
前端·excel
一个风轻云淡1 天前
GCC 和 GDB命令简单解读
java·linux·前端
u0111026751 天前
图片处理接口如何统一错误信息 前端提示与后端错误码设计
前端·状态模式
福兮说1 天前
浏览器里把 iPhone 的 HEIC 转成 JPG:Chrome 解不开、转完大了七成、拍摄时间全丢,六个坑实测
前端·javascript·图像处理·chrome·ios·iphone·heic
libokaifa1 天前
把语音模型塞进手机:sherpa-onnx 在 Android 上的 ASR / TTS
前端
deli0071 天前
DLA 枝晶生长实测:5000 个粒子集体停摆之后,分形维数收敛到 1.70
前端
IT_陈寒1 天前
Redis卡顿的锅,这次真不是大key的错
前端·人工智能·后端