首页 > 其他分享 >前端使用a标签下载非同源文件(备选方案)

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

时间:2023-12-29 13:55:23浏览次数:38  
标签:tempLink const url 标签 源文件 URL 非同 备选 下载

原理:

下载文件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标签下载非同源文件(备选方案)

标签:tempLink,const,url,标签,源文件,URL,非同,备选,下载
From: https://www.cnblogs.com/LiangSenCheng/p/17934719.html

相关文章

  • mysql 定时 数据库备份并上传到另一台服务器上,上传结束并删除源文件
    首先总共有两个脚本:#!/bin/bash:主要用于进行数据库备份、压缩、删除,单独运行命令是:bash XXX.sh#!/usr/bin/expect:主要用于进行数据备份文件的上传,单独运行命令是:expectXXX.sh这两个脚本都需要具有777权限:chmod777XXX.sh分成两个脚本写的原因是:expect主要是用于ssh远程......
  • C/C++ 实现动态资源文件释放
    当我们开发Windows应用程序时,通常会涉及到使用资源(Resource)的情况。资源可以包括图标、位图、字符串等,它们以二进制形式嵌入到可执行文件中。在某些情况下,我们可能需要从可执行文件中提取自定义资源并保存为独立的文件。在这篇博客文章中,我们将讨论如何使用C++和WinAPI实现这个目......
  • [good]vscode编译多个c源文件
    windows上实现vscode编译多个c源文件-知乎(zhihu.com)1、建立bin/doc/inc/app/src等目录2、bin目录用来存放生成的exe文件,doc用来存放帮助文档,inc用来存放*.h文件,app用来存放主程序main.c,src用来存放*.c文件3、修改lauch.json文件{//UseIntelliSensetolearnabo......
  • 29.8k star,推荐一个酷炫、强大的现代开源文件资源管理器
    先看张图,下载地址在文末:「Files」是一款为Windows设计的现代化文件管理器,它具有美观的界面、强大的功能和高效的操作。本文将介绍「Files」的基本信息、使用方法、特点和安装方式,并对其进行总结。「Files」简介「Files」是一个由社区驱动的开源项目,由数百名贡献者共同设计和......
  • Ubuntu更新源文件报错:E: 仓库 “http://ppa.launchpad.net/chris-lea/node.js/ubuntu
    E:仓库“http://ppa.launchpad.net/chris-lea/node.js/ubuntubionicRelease”没有Release文件。一条命令解决sudoadd-apt-repository--removeppa:chris-lea/node.jssudoadd-apt-repository--removeppa:xxxxx/xxxxx再去执行sudoapt-getupdate就可以顺利的解决了......
  • VS Code中C开发多源文件的编译设置
    1.引言C开发中,通常需要编译多个文件,本文将简要介绍在VSCode中进行C开发时如何编译多个文件。实例工程结构如图所示:其中,main.c文件内容如下:#include"stdio.h"/*Includings*/#include"umath.h"#include"ucmplx.h"intmain(void){/*Testumath.c*/floa......
  • UE如何确定不同平台使用的Launch源文件
    问题众所周知,UE的启动模块位于Engine\Source\Runtime\Launch文件夹,这个文件夹下包含了所有UE支持的平台类型,但是Launch.Build.cs文件并没有特殊的说明来确定使用哪个子文件夹的内容。尽管从源代码组织结构上看可以想当然的知道只会选择当前构建平台,但是UE是如何知道具体使用哪个......
  • c++ .h头文件和.cpp源文件关系(转)
    https://www.cnblogs.com/fengzhengfly/p/8884581.htmlhttps://blog.csdn.net/qq_35452533/article/details/77282326头文件是声明,源文件是定义在cpp里包含.h,就会包含该h文件的cpp定义,所以需要在cpp里使用别的.h文件中的函数只能包含该.h,或者已包含的.h中已经包含的改.h,也就......
  • 有道云笔记之备选方案Obsidian和Notion
    有道云笔记限制登录设备在商业项目中一般都会有plana、planb,对于云笔记,我也在寻找planb,有道云笔记在国内市场已经占据了很大的份额。同类型中的就不再去挑选了,我觉得商业软件,迟早也会走到有道云笔记这一步的,早在很多年前就目睹了为知笔记收费迁移到有道云笔记。在知乎上看到很多推......
  • qt软件崩溃的分析方法-定位源文件和行号
    软件(debug版exe或者release版exe)在正常运行状态下(不是gdb调试运行),如果软件崩掉,那么会直接闪退,软件什么也做不了,此时无法保存软件中的状态信息,此外,也无法提供任何软件崩溃原因的信息。因此,软件崩掉,我们需要能给出信息才行,指导我们修改源码。解决方法如下(针对Windows):注:如果用vs开发qt......