react项目中下载流文件的方法

使用场景:服务端返回文件流格式的文件,前端需要把流文件通过Blob转换成我们想要下载的格式。比如以.xlsx,.xls结尾的格式文件。

请求接口:

/**
 * @description  下载流文件的接口
 * @request      通过拦截器封装的axios请求,直接使用axios也行
 * @respinseType 下载流文件时必须要配置的请求头
 */
export const downloadTemplate = () => {
  return request.get(
    `/bottle/activity/user-wish/download-template`,  
    {},
    {
      responseType: 'blob', //必须要配置blob
    },
  );
};

封装utils方法:在src目录下创建utils文件夹,在文件夹中创建downloadFile文件

//引入时间格式化插件
import moment from 'moment';

/**
 * @description 使用时必须于请求头加上responseType: 'blob',慎用,慎用!
 * @stream  下载流(格式)
 * @filename  下载文件名称
 * @suffix  下载文件后缀,例如".xlsx"
 * @stream: any  等参数格式是对参数类型做一下限制
 */

function downloadFile(
  stream: any,                         
  filename: string = moment(new Date()).format('YYYYMMDD'),  //不传值默认以当前时间为文件名
  suffix: string,
) {
  //通过new Blob和文件格式生成blob对象
  const blob = new Blob([stream]);
  const objectURL = URL.createObjectURL(blob);
  let link = document.createElement('a');
  //下载的文件名
  link.download = `${filename}${suffix}`; 
  link.href = objectURL;
  // @ts-ignore 判断浏览器的方法
  if (!!window.ActiveXObject || 'ActiveXObject' in window) {
    window.navigator.msSaveOrOpenBlob(blob, filename);
  } else {
    link.click();
  }
  URL.revokeObjectURL(objectURL);
  link = null;
}

export default downloadFile;

点击下载文件按钮:

//引入utils定义的downloadFile方法
import { downloadFile } from '@drift-bottle/utils';

//引入下载文件的接口
import {downloadTemplate} from '@drift-bottle/services/api/index';

//下载文件方法
<Button
   onClick={() => {
       downloadTemplate().then((res) => {
        downloadFile(res, '文件名称', '.xlsx');  //downloadFile三个参数
     });
   }}
>
 下载文件
</Button>

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React进行文件下载方法可以使用file-saver库。可以通过以下步骤来实现文件下载: 1. 首先,在你的React项目安装file-saver库。可以使用npm或者yarn进行安装。 2. 在需要进行文件下载的组件引入file-saver库的saveAs方法。可以使用import语句将saveAs方法引入到你的组件。 3. 在需要进行文件下载的事件触发函数,调用后台接口获取文件格式的响应体。根据你提供的代码示例,可以看到在down1方法,通过fetch函数发送POST请求,获取响应体。 4. 在fetch函数的.then()方法,判断响应的状态码是否为200或201。如果不是,则提示下载出错。如果是,则将响应体转换为blob对象。 5. 判断blob对象的大小是否为0。如果为0,则提示下载失败。如果不为0,则调用saveAs方法将blob对象保存为文件,并指定文件名。 这样,就可以在React实现文件下载功能了。以上是一个基本的实现方法,具体的代码可能会因项目的不同而有差异,可以根据实际情况进行调整和修改。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [react表格行下载文件方法总结](https://blog.csdn.net/BHSZZY/article/details/130867696)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值