vue3文件下载功能

在项目中用到文件下载功能,记录一下.

一.步骤

1.template里写一个a标签

<a @click="exportBtn(record.id)"> 导出 </a>

2.方法传参,请求接口.

import ltExhibitinfoApi from '@/api/biz/ltExhibitinfoApi'
const exportBtn = (id) => {
	let params = {
		id: id
	}
	ltExhibitinfoApi.ltExhibitinfoExport(params).then((res) => {
        //对请求回来的数据进行处理
		const blob = new Blob([res.data], { type: 'application/octet-stream;charset=UTF-8' })
		const contentDisposition = res.headers['content-disposition']
		const patt = new RegExp('filename=([^;]+\\.[^\\.;]+);*')
		const $link = document.createElement('a')
		$link.href = URL.createObjectURL(blob)
		$link.download = decodeURIComponent(patt.exec(contentDisposition)[1])
		$link.click()
		document.body.appendChild($link)
		document.body.removeChild($link) // 下载完成移除元素
		window.URL.revokeObjectURL($link.href) // 释放掉blob对象

	})
}

3.请求里一定要加responseType: ‘blob’

import { baseRequest } from '@/utils/request'
const request = (url, ...arg) => baseRequest(`/biz/exhibitinfo/` + url, ...arg)
export default {
    // 导出按钮
    ltExhibitinfoExport(data) {
        // 一定要加 responseType
        const options = {
            responseType: 'blob'
        }
        return request('getArtZip', data, 'get', options)
    },

}

二.遇到的问题

1.decodeURIComponent(patt.exec(contentDisposition)[1])为空,找不到content-disposition字段

解决方案:

// 如果获取不到 content-disposition 字段  需要后端做以下配置。
response.setHeader("Access-Control-Expose-Headers","Content-Disposition");
response.setHeader("Content-Disposition","attachment;filename="+fileNameEncoder);
注意大小写,都是Content-Disposition。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值