javascript下载文件五种方式

news/2025/11/28 0:07:26/文章来源:https://www.cnblogs.com/ajing2018/p/19279814

javascript下载文件五种方式

参考:https://blog.csdn.net/weixin_42705100/article/details/133125521

本文介绍了五种在JavaScript中下载文件的方法:通过`window.location.href`、`window.open()`、iframe、动态a标签结合axios以及form表单。每种方法的优缺点和适用场景详细阐述,包括处理后端返回的流和文件类型兼容性问题。

前言

整理javascript下载文件五种方式,接收后台返回流下载或直接下载文件。欢迎补充~

业务场景

假设通过后端接口返回的流,需要前端点击【下载到本地】按钮下载文件。

一、window.location.href下载
 最简单的方式:url即文件或接口地址,额外参数通过url后问号拼接参数,后端get请求方式接收。

let url='http://10.0.0.103:6767/file/downloadFile'
window.location.href = url

 缺陷:
  1.直接访问可能会覆盖当前页面地址,影响用户体验。
  2.图片、pdf 等url资源会表现为预览而非下载。

二、window.open()下载

 用指定的名称将指定的资源加载到浏览器上下文(窗口 window ,内嵌框架 iframe 或者标签 tab )。
 如果没有指定名称,则一个新的窗口会被打开并且指定的资源会被加载进这个窗口的浏览器上下文中。
 url为后端提供的文件下载路径

let url='http://10.0.0.103:6767/file/downloadFile'
window.open(url);

 缺陷:
  这个方法只能将指定路径的资源加载到浏览器里面,如果文件不能被浏览器浏览,那就会被浏览器下载到本地。反之,如果下载一个txt文本,用该方法会直接预览txt文件。

三、iframe 下载

 和创建动态a标签的逻辑大同小异。

<el-button size="mini" @click="handleExport(item)">导出</el-button>
function handleExport(item) {try {let url='http://10.0.0.103:6767/file/downloadFile';let elementIftrame = document.createElement("iframe");elementIF.src = url;elementIF.style.display = "none";document.body.appendChild(elementIftrame);}catch(error) {console.log(error);}}

四、【动态a标签】结合【axios方法】的方式下载

 -axios请求将后端给的文件流下载下来
 -若该接口有登录校验,将下载的文件流转换成blob数据,反之不需要这一步
 -通过window.URL.createObjectURL(blob)将blob转化成url
 -通过动态生成a标签,模拟点击下载事件
 -完成下载动作

 1. 若/getZipInfo接口没有登录校验,就不用下载文件流转成blob数据。

let curHost=window.location.host
let fileName=`module_20230920.zip`
let url=`${curHost}/service/getZipInfo?fileName=${fileName}`
// 创建下载按钮a标签进行自动点击下载,下载完后移除按钮a标签
let downloadDom=document.createElement('a')
downloadDom.href=url
// downloadDom.download=fileName //--不是必须 若需要【前端重命名文件夹】的话这句代码就需要
document.body.appendChild(downloadDom)
downloadDom.click()
document.body.removeChild(downloadDom)

 2. 若/getZipInfo接口有登录校验,就需要把下载文件流转成blob数据再下载,res为文件流

let fileName=`module_20230920.zip`
let blob=new Blob([res],{type:'application/octet-stream'})
let href=window.URL.createObjectURL(blob)
// 创建下载按钮a标签进行自动点击下载,下载完后移除按钮a标签
let downloadDom=document.createElement('a')
downloadDom.href=href
downloadDom.download=fileName //--不是必须 若需要【前端重命名文件夹】的话这句代码就需要
document.body.appendChild(downloadDom)
downloadDom.click()
document.body.removeChild(downloadDom)
window.URL.revokeObjectURL(href)

五.form表单的形式下载【比较少用到,借鉴别人的方法】

function handleExport() {let url='http://10.0.0.103:6767/file/downloadFile'var form = $("<form>")form.attr("style", "display:none")/**target 属性规定一个名称或一个关键词,指示在何处打开 action URL,* 即在何处显示提交表单后接收到的响应。**_blank 在新窗口/选项卡中打开。*_self 在同一框架中打开。(默认)*_parent 在父框架中打开。*_top 在整个窗口中打开。*framename 在指定的 iframe 中打开。*/form.attr("target", "_self");form.attr("method", "get");form.attr("action", url);$("body").append(form);// 提交form.submit();}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/979094.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ubunutu连接蓝牙键盘鼠标

​ 双系统ubunutu能连接上蓝牙耳机,但是win能连接上蓝牙键盘鼠标ubunutu却连接不上,百思不得其解。怀疑要么是驱动要没是配置的问题。试试了一下现有文章的方法,都是要让装bluez和blueman之类,装完之后还是搜索不到…

详细介绍:从 1.0 到 13.0:C# 十八年进化史,一部写给开发者的语言成长记

详细介绍:从 1.0 到 13.0:C# 十八年进化史,一部写给开发者的语言成长记2025-11-28 00:02 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: …

生研界:技术赋能,AI如何重塑医学科研生态?

在科技浪潮席卷全球的当下,人工智能(AI)正以前所未有的速度重塑医学科研生态。从靶点发现到药物设计,从疾病预测到精准诊疗,AI技术正逐步渗透至医学科研的每一个环节,推动着医学研究范式的深刻变革。在这场变革中…

2025ICPC区域赛成都站记——为者败之,执者失之

打银2025年的成都站是我有生以来第一次线下xcpc比赛。在先前的网络赛选拔中,我们队获得了两个icpc名额和1个ccpc名额。先前西安站我们学校打了两块金牌的情况下,我们队的三个人都非常希望在大学的第一场比赛就能打出…

quickfox windows 海外回国加速器 会导致部分国外网站不能使用

比如说 google.com可以,但是grok.com不能打开 关掉quickfox后,grok.com就能打开了

4433

用StegSolve分析图片看到一个二维码,在https://cli.im/deqr/other 扫描二维码猜测为摩斯密码...--.----...--..但没有分隔,根据题目提示4433,分隔为...-/-.--/--./..-/-..,在https://www.iamwawa.cn/morse.html 解…

在VMware Workstation设置虚拟机的VNC连接功能

在VMware Workstation设置虚拟机的VNC连接功能在VMware Workstation设置虚拟机的VNC连接功能。首先在workstation中设置好虚拟机的VNC连接参数,如图:使用VNC客户端开始连接虚拟机,配置如下: 这时候出现错误提示:…

rust基础第三篇:所有权

rust基础第三篇:所有权值被唯一的scope拥有,它们共存亡。 值可以从一个scope移动到另一个scope,新的scope会拥有这个值。 一个值可以有多个只读引用和单个可变引用,它们之间是互斥关系。 引用不能超越值的存活期。…

Houdini软件简介

Houdini软件简介Houdini(wiki,chs)是一款由加拿大Side Effects Software Inc.(简称SESI)公司开发的3D动画软件,可运行于Linux、Windows、Mac OS等操作系统 与其它的三维软件相比,其结构、操作方式等有很大的差异…

Windows系统磁盘管理——迁移“恢复分区”

方案一、将“恢复分区”迁移到“新分区”将“恢复分区(例如分区 4)”迁移到新分区(分区F)中。1.1 创建新分区 在磁盘 0 的最右侧分出一块新分区(分区 F),其容量需略大于当前的“恢复分区”。 1.2 给“恢复分区”…

WinFormedge 增加登录页面(自定义布局,非左右布局) 并作为启动页面 及两种布局切换全屏非全屏

WinFormedge 增加登录页面(自定义布局,非左右布局)并作为启动页面的实现方法 1、增加一个自定义布局(Components/Layout下新建EmptyLayout.razor布局文件) 代码如下:@inherits LayoutComponentBase@Body <Fl…

2025.11.27总结

完成儿童故事的项目 完成CS架构的项目 目前bs架构的方向还没定,不过我打算在设计上就搞好这个项目,我认为只要能设计好,从目的,数据库设计,方法接口设计。清晰的将模块拆分,功能罗列出来。 这样在编码阶段才能有…

第6单元检测卷

好的,这是根据您提供的第三份PDF文档(第6单元检测卷)内容提取的题目、答案和解析,已按题型分类,并以Markdown格式呈现。第6单元检测卷 - 题目、答案与解析 一、单项选择题题目:关于数据库存储描述正确的是 ( )A.…

第7单元检查卷

单元检测卷题目与答案解析 一、单项选择题题目:在批量重命名活动照片项目中,读取CSV报名表时需跳过标题行,应使用的函数是 ( )A. csv.skip() B. next(reader) C. reader.skip() D. csv.reader(skipheader=True)答案…

2025 美本申请 SAT 高分指南:全国 TOP6培训机构甄选,从课程到服务全维度测评

2025 年美本、加本及新加坡本科申请已进入白热化阶段,SAT 作为院校筛选的核心硬指标,直接决定学子能否在万级竞争者中突围。尤其 SAT 机考改革后,题型迭代、备考周期压缩,再加上市场上机构良莠不齐 —— 部分宣称 …

2025 年江苏有机农场推荐榜:德芳有机农场全品类覆盖、国家权威有机认证

随着消费者对食品安全和健康生活方式的日益重视,有机农产品市场需求持续井喷,尤其是在经济发达的长三角地区,对高品质、可追溯的有机食材的需求达到了新的高度。2025 年,江苏省内有机农场数量不断增加,但真正具备…

题解:P5518 [MtOI2019] 幽灵乐团 / 莫比乌斯反演基础练习题

绝对是基础练习题哈!推式子不是世界上最快乐的事情嘛。题目大意:在 \(p\) 分别定义为 \(1\)、\(ijk\)、\(\gcd(i,j,k)\) 下求 \(\displaystyle \prod_{i=1}^{A}\prod_{j=1}^{B}\prod_{k=1}^{C}\left ( \frac{\text{l…

S7-1200 PROFINET与 IO device 通信

文章来源:S7-1200withIO_device重要标记: 1.首先要收1200和分布式IO的实物。 2.配置IP后,界面连接后,分配名称重新下载即可。PROFINET IO 设备指分配给一个或多个 IO 控制器的分布式现场设备(例如,远程 IO、阀岛…

Arista EOS平台安全漏洞分析与修复指南

荷兰国家网络安全中心发布Arista EOS平台安全公告,详细分析输入验证不当、权限管理缺陷等漏洞,这些漏洞可导致系统崩溃、拒绝服务攻击,并提供相应的修复方案和参考信息。安全公告 NCSC-2025-0374 [1.0.0] 发布日期:…

牺牲从不理所应当

……今天和很多人讨论流浪狗的处理问题,有些意难平。有个大嘴巴说出了一个观点,仿照美国的捕杀制度,无差别的捕捉流浪狗到收容所,限期没人领取就直接安乐死,对养狗人士严加管理,防止因遗弃造成的再流浪情况。我完…