a标签下载文件重命名(download)不生效

20,087次阅读
没有评论

共计 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)

a 标签下载文件重命名(download)不生效


原因分析:

跨域问题:如果下载文件所在的服务器与当前页面不在同一域名下,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)不生效

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-30发表,共计1053字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)