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

前端下载文件有哪些方式

前端下载文件有哪些方式

在前端,最常见和最常用的文件下载方式是:

  1. 使用 标签的 download 属性:

创建一个 标签,并设置其 href 属性为文件的 URL,然后使用 download 属性指定下载的文件名。
这种方式简单直接,适用于下载单个文件,例如图片、文档、音频或视频等。

  1. window.open(imageUrl, ‘_blank’)
    window.open 方法可以在新的浏览器窗口或标签页中打开指定的 URL。通过将文件的 URL 传递给 window.open 方法,并指定第二个参数为 _blank,可以在新的标签页中打开文件,并触发浏览器的文件下载行为

window.open 方法可能会受到浏览器的弹出窗口阻止设置的影响,因此在某些情况下,浏览器可能会阻止弹出新的标签页。此外,该方式无法自定义下载文件名或其他下载选项。

  1. 使用 fetch API:
    使用 fetch 方法发送 GET 请求获取文件数据,然后使用 Response.blob() 方法将响应数据转换为 Blob 对象。
    创建一个链接或 Blob 对象,并使用 URL.createObjectURL 方法生成一个临时链接,最后模拟点击下载。
    这种方式适用于需要在下载前进行更多处理的情况,例如添加请求头、验证、处理错误等,以及需要动态生成下载内容的场景。

不同的下载方式适用于不同的场景

  1. window.open 方法:
  • 适用于直接在浏览器中打开文件或以新窗口或标签页的形式显示文件内容。
  • 适用于非敏感、公开的文件下载,例如图片、PDF 文件等。
  • 不适用于需要自定义下载文件名或其他下载选项的场景。
  1. 标签的 download 属性:
  • 适用于直接在浏览器中下载文件,提供了简单的方式指定下载文件的名称。
  • 适用于单个文件的下载,例如图片、文档、音频或视频文件等。
  1. 使用 Fetch API 和 Axios :
  • 适用于需要在前端进行更多处理的下载操作,例如在下载前需要添加请求头、验证、处理错误等。
  • 适用于需要动态生成下载内容的场景,例如将多个文件合并为一个压缩文件或生成动态报表等。
  • 提供更多的灵活性和控制能力,但可能需要更多的代码和处理逻辑。

Fetch API 是原生的 JavaScript API,提供了一种简单、基础的方式来发送和处理网络请求。它是现代浏览器原生支持的一种方法。

而 Axios 是一个流行的第三方库,提供了更高级、更易用的 API,用于发送 HTTP 请求。Axios 具有更多的功能和配置选项,并且能够在不同的环境中使用(包括浏览器和 Node.js)。

总结:如果只是简单地下载一个单独的文件,并且不需要进行额外的处理或自定义,那么使用 标签的 download 属性或 window.open 方法是最简单和直接的方式。如果需要更多的控制和处理能力,或者需要动态生成下载内容,那么使用 fetch API 可能更适合。

使用Axios 下载文件举例

  const handleDownload = (imageUrl: string) => {let token = localStorage.getItem('token');if (null === token) {token = '';}axios({url: imageUrl,method: 'GET',responseType: 'blob', // 设置响应类型为 blobheaders: {Authorization: `Bearer ${token}`,  // 替换为您的 Bearer Token},}).then((response) => {const url = URL.createObjectURL(new Blob([response.data]));const link = document.createElement('a');link.href = url;link.download = 'filename.jpg'; // 设置下载的文件名link.click();URL.revokeObjectURL(url);}).catch((error) => {console.error('Error downloading file:', error);});};
http://www.lryc.cn/news/295365.html

相关文章:

  • vscode预览github上的markdown效果
  • 使用PaddleNLP识别垃圾邮件:用BERT做中文邮件内容分类,验证集准确率高达99.6%以上(附公开数据集)
  • 在bash或脚本中,如何并行执行命令或任务(命令行、parallel、make)
  • 拼音笔记笔记
  • 13. Threejs案例-绘制3D文字
  • clickhouse清理日志。
  • JS中实现继承
  • spring boot学习第九篇:操作mongo的集合和集合中的数据
  • momentJs推导日历组件
  • Linux C/C++ 原始套接字:打造链路层ping实现
  • TCP 粘包/拆包
  • 【Spring Boot 3】应用启动执行特定逻辑
  • 设计模式(行为型模式)观察者模式
  • Windows 版Oracle 数据库(安装)详细过程
  • 编程实例分享,计费系统一定要安装灯光控制吗?佳易王计时计费管理系统软件V18.0教程说明
  • 【webpack】优化提升
  • 视频无损放大修复工具Topaz Video AI 新手入门教程
  • 《向量数据库指南》——Milvus Cloud 「部署」:简化部署一直在路上
  • 使用x86架构+Nvidia消费显卡12G显存,搭建智能终端,将大模型本地化部署,说不定是未来方向,开源交互机器人设计
  • 关于RabbitMQ面试题汇总
  • GoogleTest 单元测试
  • Mac利用brew安装mysql并设置初始密码
  • R语言入门笔记2.2
  • 一般系统的请求认证授权思路【gateway网关+jwt+redis+请求头httpheader】
  • c# 正则表达式 帮助类
  • 告别mPDF迎来TCPDF和中文打印遇到的问题
  • mysql 多数据源
  • uniapp 使用renderjs引入echarts
  • hr最讨厌这6种应届生简历❌
  • 【Linux笔记】文件系统与软硬链接