共计 1053 个字符,预计需要花费 3 分钟才能阅读完成。
项目场景:
移动端使用
a
标签下载文件
问题描述
下载的文件使用
download
重命名不生效
APP 中接收数据代码:
const link = document.createElement('a')
link.style.display = 'none'
link.href = 'http://192.168.103.1:8080/factory/v1/group1/M00/00/30/wKhnWWa6xf2AEеKVAAAAFQHKOQM949.txt'
link.setAttribute('download', `${dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss')}`)
document.body.appendChild(link)
link.click()
document.body.removeChild(link)
原因分析:
跨域问题:如果下载文件所在的服务器与当前页面不在同一域名下,download 属性可能无法正常工作。这是因为跨域访问限制了文件下载。
解决方案:
使用
fetch
或者axios
获取数据流,转成blob
之后就是同源的文件了,此时可以使用a
标签正常下载了,注意需要添加请求头'Content-Type': 'application/json;charset=UTF-8'
fetch('http://192.168.103.1:8080/factory/v1/group1/M00/00/30/wKhnWWa6xf2AEеKVAAAAFQHKOQM949.txt', {
method: 'get',
heanders: {
'Content-Type': 'application/json;charset=UTF-8'
}
})
.then(res => res.blob())
.then(blob => {
const link = document.createElement('a')
link.style.display = 'none'
link.download = `${dayjs(new Date()).format('YYYY-MM-DD HH:mm:ss')}`
link.href = URL.createObjectURL(blob)
document.body.appendChild(link)
link.click()
URL.revokeObjectURL(link.href)
document.body.removeChild(link)
})
原文地址: a 标签下载文件重命名(download)不生效
正文完