尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

javascript下载文件五种方式

javascript下载文件五种方式
📅 发布时间:2026/6/18 10:35:11

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();}

 

相关新闻

  • 2025ICPC区域赛成都站记——为者败之,执者失之
  • quickfox windows 海外回国加速器 会导致部分国外网站不能使用
  • 4433

最新新闻

  • vscode-edge-devtools 设备模拟功能详解:响应式设计调试技巧
  • Loop:优雅掌控macOS窗口管理的终极解决方案
  • 洛雪音乐免费音源终极配置指南:解锁全网无损音乐的完整教程
  • 2025年终极指南:如何快速上手MATH数据集进行AI数学推理评估
  • 陶瓷厂高温软水器十大实力口碑榜,采购照着选不踩坑 - 工业品牌热点
  • Cuckoo3终极指南:如何快速搭建开源恶意软件分析沙箱

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号