前端异步+token下载文件

首先,需要登录的时候把token塞入localStorage里面

js 复制代码
localStorage.setItem('token', data.token);

再写一个公用方法来下载文件(基于ts)

逻辑就是先发一个请求,返回成功后,创建一个a标签,然后点击它

ts 复制代码
// 下载文件
export const download = (link: string, filename: string) => {
  const xhr = new XMLHttpRequest();
  // POST请求,link,async(是否异步)
  xhr.open("POST", link, true);
  // //设置请求头参数的方式,如果没有可忽略此行代码
  xhr.setRequestHeader("token", window?.localStorage?.getItem("token"));
  // //设置响应类型为 blob
  xhr.responseType = "blob";
  // //关键部分
  xhr.onload = function() {
    //   //如果请求执行成功
    if (this.status === 200) {
      const blob = this.response;
      // 创建一个a标签
      const a = document.createElement("a");
      // blob.type = "application/octet-stream";
      // 创键临时url对象
      const url = window.URL.createObjectURL(new Blob([blob]));
      a.href = url;
      a.download = filename;
      // 点击a标签
      a.click();
      // 释放之前创建的URL对象
      window.URL.revokeObjectURL(link);
    }
  };
  // //发送请求
  xhr.send();
}

以下为测试(基于React)

ts 复制代码
		<Button
            onClick={() => {
        // currentPage、pageSize是分页信息,id、name是查询信息
              const link = `localhost:8080/url?currentPage=${searchParams.currentPage}&pageSize=${searchParams.pageSize}${searchParams.id !== undefined ? `&id=${searchParams.id}` : ""}${searchParams.name !== undefined ? `&name=${searchParams.name}` : ""}`
              download(link, "信息.xlsx")
            }}
            key="download"
            target='_blank'
          >
            <CloudDownloadOutlined /> 导出本页
          </Button>
相关推荐
HashTang15 小时前
【AI 编程实战】第 7 篇:登录流程设计 - 多场景、多步骤的优雅实现
前端·uni-app·ai编程
cos16 小时前
Fork 主题如何更新?基于 Ink 构建主题更新 CLI 工具
前端·javascript·git
小满zs16 小时前
Next.js第二十一章(环境变量)
前端·next.js
odoo中国16 小时前
Odoo 19 模块结构概述
开发语言·python·module·odoo·核心组件·py文件按
C***115016 小时前
Spring aop 五种通知类型
java·前端·spring
代码N年归来仍是新手村成员16 小时前
【Java转Go】即时通信系统代码分析(一)基础Server 构建
java·开发语言·golang
朝阳3917 小时前
前端项目的【package-lock.json】详解
前端
Z1Jxxx17 小时前
01序列01序列
开发语言·c++·算法
摸鱼的春哥17 小时前
AI编排实战:用 n8n + DeepSeek + Groq 打造全自动视频洗稿流水线
前端·javascript·后端