发布时间:2023-05-30 14:00
<a href="xxx.txt" download="xxx.txt">Download Your Foo</a>
html的a标签,设置download属性后,可以下载href指向的文件。
在js中往往是点击某一个按钮后下载一个文件,并且文件的地址是变化的。因此我们可以动态创建一个a标签,设置好download和href属性,然后添加到页面中,用代码触发click事件,就可以实现下载了。
我们可以看到后端给我们返回这个文件流
记得加上
responseType: 'blob'
// 导出下载接口
export function downloadOpen(params) {
return request({
url: '/slingshot/spider/data/unionsExport',
method: 'get',
params: params,
responseType: 'blob'
});
}
将文件流转换成blob
/** 导出按钮操作 */
async handleExport() {
let res = await downloadOpen({
keyWord: this.queryParams.keyWord
})
let blob = new Blob([res],{type:res.type})
let downloadElement = document.createElement('a')
let href = window.URL.createObjectURL(blob)
downloadElement.href = href
document.body.appendChild(downloadElement)
downloadElement.click()
document.body.removeChild(downloadElement);//移除元素;防止连续点击创建多个a标签
window.URL.revokeObjectURL(href)
}
}
这里打印出来的是res;后端返回的文件流 转换blob后的
通过点击事件 触发a标签
downloadElement.click()
这个size有数字 表示的是你文件的大小,如果是0就是没有了;
这样就可以下载了;
这里是详细的解释;
这里可以看到 我们可以拿到这个filename
const fileName = res.headers['content-disposition'].split(';');
const filename2 = fileName[1].split('=')
const filename3 = decodeURIComponent(filename2[1])
通过这里 拿到 文件名称;
在通过这个将文件名附上去;
downloadElement.download = filename3
这里是整个点击导出的方法了;
/** 导出按钮操作 */
async handleExport() {
let res = await downloadOpen({
keyWord: this.queryParams.keyWord
})
const fileName = res.headers['content-disposition'].split(';');
const filename2 = fileName[1].split('=')
const filename3 = decodeURIComponent(filename2[1])
let blob = new Blob([res], {
type: res.type
})
let downloadElement = document.createElement('a')
let href = window.URL.createObjectURL(blob)
downloadElement.href = href
downloadElement.download = filename3
document.body.appendChild(downloadElement)
downloadElement.click()
window.URL.revokeObjectURL(href)
}
}
docker 源码 mysql_linux下利用Docker安装mysql的步骤
2 年的迭代和努力,终让 LiteFlow 获得了本年度的 GVP!
手撕前端面试题【javascript~ 总成绩排名、子字符串频次统计、继承、判断斐波那契数组等】
rust 02 rustdesk基于rust的开源远程控制软件
CPU之外,国产芯片再突破,再也不用看AMD和NVIDIA的脸色了
CloudBees CI使用Velero进行灾备(DR)概念验证
Java中的StackOverflowError错误问题及解决方法