当前位置: 首页 > news >正文

javascript下载文件五种方式

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.jsqmd.com/news/53365/

相关文章:

  • ubunutu连接蓝牙键盘鼠标
  • 详细介绍:从 1.0 到 13.0:C# 十八年进化史,一部写给开发者的语言成长记
  • 生研界:技术赋能,AI如何重塑医学科研生态?
  • 2025ICPC区域赛成都站记——为者败之,执者失之
  • quickfox windows 海外回国加速器 会导致部分国外网站不能使用
  • 4433
  • 在VMware Workstation设置虚拟机的VNC连接功能
  • rust基础第三篇:所有权
  • Houdini软件简介
  • Windows系统磁盘管理——迁移“恢复分区”
  • 2025.11.27总结
  • 第6单元检测卷
  • 第7单元检查卷
  • 2025 美本申请 SAT 高分指南:全国 TOP6培训机构甄选,从课程到服务全维度测评
  • 题解:P5518 [MtOI2019] 幽灵乐团 / 莫比乌斯反演基础练习题
  • Arista EOS平台安全漏洞分析与修复指南
  • 牺牲从不理所应当
  • 干货|2025NCUK机构择优指南:官方授权中心排名对比+教学体系深度解析
  • 第四十一天
  • 第四十二天
  • 第四十天
  • python的日志使用装饰器,记录的日志文件记录
  • 一文入门 LangGraph 开发
  • Real people are important.
  • 【pandas基础】用Pandas处理泰坦尼克号获救数据
  • Scrum冲刺阶段 Day Four
  • Day26光标类型cursor
  • why I can not fully accept měigu is good
  • is měigu good
  • Day26透明度