使用a标签属性download下载pdf,txt链接文件,如果是相同域时,可以直接下载
但是如果域不同,则不是下载,而是直接打开页面预览文件
但是需求是直接点击下载文件,而不是打开预览
已知通过a标签的download属性,可以直接下载后台接口返回的数据流文件
所以可以模拟发送http请求,将文件链接转换成文件流来使用a标签download下载
downloadFileAPI(path)
.then((response) => {
downloadFileWithBuffer(response.data, filename,'png')
})
.catch(() => {})
import request from '@/utils/http'
export function downloadFileAPI(url) {
return request({
url: url,
method: 'get',
responseType: 'blob'
})
}
export function downloadFileWithBuffer(data, name,type) {
const blob = new Blob([data])
var downloadElement = document.createElement('a')// 创建a标签
var href = window.URL.createObjectURL(blob) // 创建下载的链接
downloadElement.href = href
downloadElement.download = name+'.'+type // 下载后文件名
document.body.appendChild(downloadElement)
downloadElement.click() // 点击下载
document.body.removeChild(downloadElement) // 下载完成移除元素
window.URL.revokeObjectURL(href) // 释放掉blob对象
}