前端异步+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>
相关推荐
白兰地空瓶9 小时前
你以为 Props 只是传参? 不,它是 React 组件设计的“灵魂系统”
react.js
程序员码歌10 小时前
短思考第261天,浪费时间的十个低效行为,看看你中了几个?
前端·ai编程
咖啡の猫10 小时前
Python字典推导式
开发语言·python
Swift社区11 小时前
React Navigation 生命周期完整心智模型
前端·react.js·前端框架
若梦plus11 小时前
从微信公众号&小程序的SDK剖析JSBridge
前端
leiming611 小时前
C++ vector容器
开发语言·c++·算法
SystickInt11 小时前
C语言 strcpy和memcpy 异同/区别
c语言·开发语言
用泥种荷花11 小时前
Python环境安装
前端
CS Beginner11 小时前
【C语言】windows下编译mingw版本的glew库
c语言·开发语言·windows
Light6011 小时前
性能提升 60%:前端性能优化终极指南
前端·性能优化·图片压缩·渲染优化·按需拆包·边缘缓存·ai 自动化