实现导出功能的方式有哪些

46 阅读1分钟

方式一: 使用封装的Request工具实现文件流下载(常用的一种)

  • 封装后的Request工具调用简单,代码更简洁
  • 支持传递Token进行身份验证,安全性较高

const onExport = () => {
  setExportLoading(true); // 1. 设置加载状态为 true(显示加载中)
  const params = filterRef.current; // 2. 获取当前过滤条件参数

  // 3. 调用 API 下载文件
  wapper(overviewResa.downloadUrl(params)).then(response => {
    setExportLoading(false); // 4. 下载完成,关闭加载状态

    // 5. 创建 Blob 对象(二进制数据)
    const blob = new Blob([response], { type: 'application/octet-stream' });

    // 6. 生成临时 URL
    const url = window.URL.createObjectURL(blob);

    // 7. 创建 `<a>` 标签触发下载
    const a = document.createElement('a');
    a.href = url;
    a.download = '模型概览.xlsx'; // 设置下载文件名
    document.body.appendChild(a); // 添加到 DOM
    a.click(); // 模拟点击下载
    a.remove(); // 移除 `<a>` 标签

    // 8. 释放临时 URL 内存
    window.URL.revokeObjectURL(url);
  });
};

方式二: 直接通过URL跳转下载

  • 实现简单,不需要处理Blob对象及下载链接
  • 适合下载无需身份验证或参数简单的文件
  const onDownLoadExcel = () => {
      let baseURL=`${window.location.protocol}//${process.conf.ip}${process.conf.nginx ? '/gate11' : ''}`;
      window.open(baseURL + '/asset/xxx/download?templete=设备树类型导入模板');
    }
  };