前端将二进制数据流转为文件_前端下载二进制流文件

本文介绍了前端如何处理后台返回的二进制数据流,通过创建Blob对象和设置responseType为arraybuffer来实现文件下载。同时,针对文件过大情况,通过TextDecoder将arraybuffer转换为字符串进行错误判断和提示。
摘要由CSDN通过智能技术生成

平时在前端下载文件有两种方式,一种是后台提供一个 URL,然后用 window.open(URL) 下载,另一种就是后台直接返回文件的二进制内容,然后前端转化一下再下载。

由于第一种方式比较简单,在此不做探讨。本文主要讲解一下第二种方式怎么实现。

Blob、ajax(axios)

mdn 上是这样介绍 Blob 的:

Blob 对象表示一个不可变、原始数据的类文件对象。Blob 表示的不一定是JavaScript原生格式的数据

具体使用方法

axios({

method: 'post',

url: '/export',

})

.then(res => {

// 假设 data 是返回来的二进制数据

const data = res.data

const url = window.URL.createObjectURL(new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}))

const link = document.createElement('a')

link.style.display = 'none'

link.href = url

link.setAttribute('download', 'excel.xlsx')

document.body.appendChild(link)

link.click()

document.bo

如果你想要在前端二进制流转换为 JSON 并下载文件,可以使用以下示例代码: ```javascript function downloadJsonFile(data, fileName) { const json = JSON.stringify(data); const blob = new Blob([json], { type: 'application/json' }); if (navigator.msSaveBlob) { // For IE and Edge navigator.msSaveBlob(blob, fileName); } else { const link = document.createElement('a'); const url = URL.createObjectURL(blob); link.href = url; link.download = fileName; document.body.appendChild(link); link.click(); setTimeout(() => { document.body.removeChild(link); URL.revokeObjectURL(url); }, 0); } } // Example usage: const jsonData = ... // Your JSON data const fileName = 'example.json'; downloadJsonFile(jsonData, fileName); ``` 在上面的示例代码中,`downloadJsonFile` 函数接收 JSON 数据和文件名作为参数。它首先将 JSON 数据转换为字符串,并创建一个 Blob 对象,将字符串和 MIME 类型 `'application/json'` 传递给它。然后,根据浏览器支持情况,通过不同的方式来触发文件下载。 对于 IE 和 Edge 浏览器,使用 `navigator.msSaveBlob` 方法来保存 Blob 对象。对于其他现代浏览器,使用 URL.createObjectURL 创建一个临时的下载链接,并将其附加到一个 `<a>` 元素上。然后,模拟点击这个链接来触发文件下载。最后,在下载完成后,移除临时链接并释放资源。 请确保你已经将正确的 JSON 数据传递给 `downloadJsonFile` 函数,并提供了正确的文件名。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值