下载文件设置download不生效问题

当设置download属性后仍出现文件名乱码,可能是由于跨域导致。文章提供了两种解决方案:一是使用XMLHttpRequest创建请求,获取blob对象并创建下载链接;二是通过axios获取数据,创建blob对象并设定文件名进行下载。这两种方法都确保了文件的正确命名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下载文件设置了download属性,但是下载的名称还是乱码,可能是因为下载文件跨域了,解决办法如下

    download(file) {
      const urls = file.attachLink || file.link
      const x = new window.XMLHttpRequest()
        x.open('GET', urls, true)
        x.responseType = 'blob'
        x.onload = () => {
          const url = window.URL.createObjectURL(x.response)
          const a = document.createElement('a')
          a.href = url
          a.download = file.name
          a.click()
        }
      x.send()
    },

      this.axios.get('接口地址', { params: params, responseType: 'blob' }).then(res => {
        const blob = new Blob([res], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8' })
        const url = window.URL.createObjectURL(blob)
        const a = document.createElement('a')
        document.body.appendChild(a)
        a.href = url
        a.download = '文件名称'
        a.click()
        window.URL.revokeObjectURL(url)
      })
    }
### 解决方案 当遇到HTML `<a>` 标签 `download` 属性无法正常设置下载文件名的情况时,通常是因为目标资源存在跨域问题。在这种情况下,浏览器会忽略 `download` 属性[^1]。 为了绕过这一限制并实现自定义文件名的功能,可以通过JavaScript动态创建Blob对象来完成文件下载操作。以下是具体的实现方法: #### JavaScript 实现代码 通过XMLHttpRequest获取远程文件数据,并将其转换为Blob URL用于本地下载。 ```javascript function downloadFile(url, fileName) { var xhr = new XMLHttpRequest(); xhr.open("GET", url, true); xhr.responseType = "blob"; // 设置响应类型为 blob xhr.onload = function (event) { if (this.status === 200) { var blob = this.response; // 创建 Blob URL var fileURL = window.URL.createObjectURL(blob); // 动态创建<a>标签触发下载 var aTag = document.createElement("a"); aTag.style.display = "none"; aTag.href = fileURL; aTag.download = fileName; document.body.appendChild(aTag); aTag.click(); // 清理临时对象 window.URL.revokeObjectURL(fileURL); document.body.removeChild(aTag); } }; xhr.onerror = function () { console.error("Download failed."); }; xhr.send(); } ``` 调用此函数的方式如下所示: ```html <a href="#" onclick="downloadFile('https://example.com/file.pdf', 'customFileName.pdf')">点击下载</a> ``` 以上脚本能够有效规避因跨域而导致的 `download` 属性失效问题[^1]。 ### 注意事项 - 确保服务器端支持CORS(跨源资源共享),以便客户端能成功请求到资源。 - 如果涉及大文件传输,则需考虑性能优化以及错误处理机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值