前端使用a标签下载非同源文件(备选方案)
2023-12-29 16:49:15
    		原理:
下载文件Blob,再把Blob转为本地链接,以实现跨域变同域,最后使用a标签实现下载;
优缺点:
● 优点:能达到下载跨域文件的目的;
● 缺点:不适用于大文件,大文件体验较差;
示例:
使用fetch把文件下载下来,然后URL.createObjectURL转为本地链接,最后使用a标签下载;
/**
 * 跨域文件下载
* @param url  附件地址
* @param download  附件可以预览或者下载
*/
// 获取文件名
// 适用URL格式类似为:http://abc.com/xxx-file.jpg
const getFileName = (url) => {
  const name = url.split('/').pop()
  return name.pop()
}
// 下载
export const fileDownload = (url) => {
  const filename = getFileName(url)
  fetch(url)
    .then(response => {
      return response.blob()
    })
    .then(blob => {
      const blobUrl = window.URL.createObjectURL(blob)
      // 创建a标签下载
      const tempLink = document.createElement('a')
      tempLink.style.display = 'none'
      tempLink.href = blobUrl
      tempLink.setAttribute('download', filename)
      document.body.appendChild(tempLink)
      tempLink.click()
      setTimeout(() => {
        URL.revokeObjectURL(blobUrl)
        document.body.removeChild(tempLink)
      })
    })
}
原文链接:
    			文章来源:https://blog.csdn.net/github_38967228/article/details/135289289
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
    	本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!