React下载文件流

前端小白,仅供参考,个人实测可以

今天遇到了一个新的需求,添加一个下载按钮,下载一个后缀为crt格式的文件

正常逻辑是后端给到一个下载的接口地址,点击事件内直接调用对应接口

但是也有例外情况,后端给的是一个文件流地址

如图↓

也就是说你调用接口拿到的并不是一个文件,而是一个文件的内容(这里是我自己理解的)

那这种应该怎么才能把数据变成文件并下载下来呢

首先要配置你的axios或者fetch请求

可以写成下面这样在接口文件内,这样直接调用getExample就可以了

然后直接照抄下面的代码 封装成一个函数 然后在接口的then处理函数里直接处理对应数据,原理是创建一个类文件对象 注意第四行要改成你要下载的文件的名字(ps:目前没发现可以随机下载任意文件名字的配置,也就是说这里是写死的)

export default (res: any) => {

let blob = new Blob([res.data]);

// 提取文件名

let contentDisposition: any = "";

if (res.headers["content-disposition"])

contentDisposition = res.headers["content-disposition"];

if (res.headers["Content-disposition"])

contentDisposition = res.headers["Content-disposition"];

const err = contentDisposition.match(/err=(.*)/);

if (err && err[1]) {

message.error(decodeURI(err[1]));

return;

}

const fileName = contentDisposition.match(/filename=(.*)/)[1];

if (typeof window.navigator.msSaveBlob !== "undefined") {

// 兼容IE,window.navigator.msSaveBlob:以本地方式保存文件

window.navigator.msSaveBlob(blob, decodeURI(fileName));

} else {

// 创建新的URL并指向File对象或者Blob对象的地址

const blobURL = window.URL.createObjectURL(blob);

// 创建a标签,用于跳转至下载链接

const tempLink = document.createElement("a");

tempLink.style.display = "none";

tempLink.href = blobURL;

tempLink.setAttribute("download", decodeURI(fileName));

// 兼容:某些浏览器不支持HTML5的download属性

if (typeof tempLink.download === "undefined") {

tempLink.setAttribute("target", "_blank");

}

// 挂载a标签

document.body.appendChild(tempLink);

tempLink.click();

document.body.removeChild(tempLink);

// 释放blob URL地址

window.URL.revokeObjectURL(blobURL);

}

return true;

};

当然,如果直接是可以下载文件的地址 用<a>标签的downLoad的属性,或者window.open(“下载地址”)来完成下载,这里不再一一赘述

第一篇文档

如有问题请留言~ 欢迎交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值