前端使用a标签下载非同源文件(备选方案)

原理:

下载文件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)
      })
    })
}

原文链接:

前端使用a标签下载非同源文件(备选方案)

相关推荐

  1. 前端使用a标签下载源文件(方案)

    2023-12-30 09:28:04       66 阅读
  2. 前端下载文件方法

    2023-12-30 09:28:04       56 阅读
  3. HTML中的<a标签使用指南

    2023-12-30 09:28:04       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-30 09:28:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-30 09:28:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-30 09:28:04       82 阅读
  4. Python语言-面向对象

    2023-12-30 09:28:04       91 阅读

热门阅读

  1. shiro反序列化与fastjson反序列化漏洞原理

    2023-12-30 09:28:04       71 阅读
  2. 【无标题】

    2023-12-30 09:28:04       67 阅读
  3. 限制el-upload组件的上传文件大小

    2023-12-30 09:28:04       68 阅读
  4. ffmpeg与SDL结合使用

    2023-12-30 09:28:04       55 阅读
  5. 随笔 | 写在年末冬日的夜里

    2023-12-30 09:28:04       56 阅读
  6. LeetCode 23 合并 K 个升序链表

    2023-12-30 09:28:04       60 阅读
  7. 使用ChatGPT进行论文润色:智能化的写作助手

    2023-12-30 09:28:04       79 阅读
  8. 第三章 使用$ZF(-100)运行程序或系统命令

    2023-12-30 09:28:04       54 阅读
  9. 解释git的基本概念和使用方式

    2023-12-30 09:28:04       51 阅读
  10. 记录一次云服务器使用docker搭建kafka的过程

    2023-12-30 09:28:04       65 阅读
  11. golang第七卷---go中的数据结构

    2023-12-30 09:28:04       63 阅读
  12. K8s是什么?k8s应用场景是什么?

    2023-12-30 09:28:04       44 阅读