vue实现blob文档流下载文件

在这里简单的记录下vue如何实现blob文档流下载文件,通过调用后端接口或返回一个很乱的数据

如下图

注意:在这里需要特别注意的是不管接口是get还是post请求,在请求时需要多加一个参数 responseType:'blob' ,否则等等下载的文件会出现乱码

常见的axios请求如下:

//post请求
axios.post(url, {...params}, {responseType: 'blob'}).then((res) => {
				
			}).catch((err) => {
				
			})

//get请求
axios.get(url, {params: {}, responseType: 'blob'}).then((res) => {
	
}).catch((err) => {
	
})

如果是封装后的axios,对应的在请求时添加

以下为接口成功回调后的操作

//下载
downLoad() {
    // 原生请求可替换成对应封装后请求成功的回调中进行处理
		axios.post(url, {...params}, {responseType: 'blob'}).then((res) => {
			const blob = new Blob([res.data])//返回一个新的blob对象
			let fileName = '模版.xls'//下载文件名
			const downLoadElement = document.createElement('a')//创建a标签
			downLoadElement.style.display = 'none'//a标签样式为隐藏
			const href = window.URL.createObjectURL(blob)//创建window临时地址
			downLoadElement.href = href//跳转地址
			downLoadElement.setAttribute('download', fileName)
			document.body.appendChild(downLoadElement)//将指定的dom添加的body之后
			downLoadElement.click()//点击事件
			document.body.removeChild(downLoadElement)//移除dom
			window.URL.revokeObjectURL(href)//释放url地址
		}).catch((err) => {

	})
			
},

### 实现 VueBlob 文件流预览 为了实现Vue 项目中对来自服务器的文件流进行预览,可以按照如下方法操作: 在发送 HTTP 请求获取文件数据时,需确保 `axios` 或其他 HTTP 客户端库配置了正确的响应类型。对于大多数浏览器来说,当处理 PDF 或图片这类二进制大对象 (BLOB) 数据时,应该将请求头中的 `responseType` 设置为 `'arraybuffer'`[^2]。 接收到的数据应当被转换成一个 JavaScript 的 `Blob` 对象以便于创建 URL 来访问该资源。这里需要注意的是,在构建 `Blob` 对象的时候要指定其 MIME 类型,这通常可以从服务端响应头部字段 `Content-Type` 获取到。 下面是一个简单的例子来展示如何完成这项工作: ```javascript // 假设已安装并导入 axios 库用于发起网络请求 import axios from 'axios'; async function previewFile(url) { try { const response = await axios({ method: 'get', url, responseType: 'arraybuffer', // 确保正确设置此参数 }); // 使用后端返回的内容类型作为 blob 的类型 let contentType = response.headers['content-type']; // 创建一个新的 Blob 对象 let fileBlob = new Blob([response.data], { type: contentType }); // 将 Blob 转换成可点击链接的形式 let fileUrl = window.URL.createObjectURL(fileBlob); // 打开新窗口显示文档 window.open(fileUrl); } catch (error) { console.error('Error fetching or opening the document:', error); } } ``` 这段代码展示了怎样通过 Axios 发送 GET 请求去取得远程文件,并将其转化为可以在本地查看的对象 URL。一旦有了这个 URL,就可以很容易地在一个新的标签页里打开它来进行在线预览了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值