移动端a标签下载文件重命名(download)不生效解决办法
项目场景:
移动端使用
a标签下载文件
问题描述
下载的文件使用
download重命名不生效
APP 中接收数据代码:
const link = document.createElement('a') // 创建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) // a标签插至页面中
link.click() // 强制触发a标签事件
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 对象以及移除 a 标签
URL.revokeObjectURL(link.href)
document.body.removeChild(link)
})

总结
到此这篇关于移动端a标签下载文件重命名(download)不生效解决办法的文章就介绍到这了,更多相关a标签下载文件重命名不生效内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
layui 中select下拉change事件失效的解决方法
今天小编就为大家分享一篇layui 中select下拉change事件失效的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧2019-09-09
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
这篇文章主要介绍了BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法,下面通过本文给大家详细说明一下,需要的朋友可以参考下2016-12-12
Bootstrap CSS组件之按钮组(btn-group)
这篇文章主要为大家详细介绍了Bootstrap CSS组件之按钮组(btn-group),具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-12-12
JS 中LocalStorage和SessionStorage的使用
最近因为项目上需要使用到客户端存储,所以稍微研究了一下,以下说说自己的理解和使用经验,特此分享到脚本之家平台,感兴趣的朋友参考下吧2017-08-08


最新评论