当前位置: 首页 > 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);});};

相关文章:

前端下载文件有哪些方式

前端下载文件有哪些方式 在前端,最常见和最常用的文件下载方式是: 使用 标签的 download 属性: 创建一个 标签,并设置其 href 属性为文件的 URL,然后使用 download 属性指定下载的文件名。 这种方式简单直接&…...

vscode预览github上的markdown效果

需要安装的插件有: Github Markdown Preview Markdown Checkboxes Markdown Emoji Markdown footnotes Markdown Preview Github Styling Markdown Preview Mermaid Support Markdown yaml Preamble ctrlshiftv结合双页功能...

使用PaddleNLP识别垃圾邮件:用BERT做中文邮件内容分类,验证集准确率高达99.6%以上(附公开数据集)

使用PaddleNLP识别垃圾邮件:用BERT做中文邮件内容分类,验证集准确率高达99.6%以上(附公开数据集)。 要使用PaddleNLP和BERT来识别垃圾邮件并做中文邮件内容分类,可以按照以下步骤进行操作: 安装PaddlePaddle和PaddleNLP:首先,确保在你的环境中已经安装了PaddlePaddle和…...

在bash或脚本中,如何并行执行命令或任务(命令行、parallel、make)

最近要批量解压归档文件和压缩包,所以就想能不能并行执行这些工作。因为tar自身不支持并行解压,但是像make却可以支持生成一些文件,所以我才有了这种想法。 方法有两种,第一种不用安装任何软件或工具,直接bash或其他 …...

拼音笔记笔记

一、翀的读音:chōng 声母:ch 韵母:ong 声调:一声 二、汉字释义: 向上直飞,相当于“冲”。 三、汉字结构:左右结构 四、部首:羽 五、相关词组: 翀举:谓成仙升…...

13. Threejs案例-绘制3D文字

13. Threejs案例-绘制3D文字 实现效果 知识点 FontLoader 一个用于加载 JSON 格式的字体的类。 返回 font,返回值是表示字体的 Shape 类型的数组。 其内部使用 FileLoader 来加载文件。 构造器 FontLoader( manager : LoadingManager ) 参数类型描述managerLo…...

clickhouse清理日志。

参考Clickhouse&#xff1a;日志表占用大量磁盘空间怎么办&#xff1f;_clickhouse store目录很大-CSDN博客t 清理脚本如下&#xff0c;清理动作需要时间比较长&#xff0c;10多分钟&#xff1a; alter table system.trace_log delete where event_date < 2024-01-01 alt…...

JS中实现继承

1.使用call实现继承&#xff08;不推荐&#xff09; function Animal(name) {this.name name;this.run function() {console.log(this.name, "跑");} } function Dog(name) {// 继承Animal.call(this, name);this.sleep function() {console.log(this.name, &quo…...

spring boot学习第九篇:操作mongo的集合和集合中的数据

1、安装好了Mongodb 参考&#xff1a;ubuntu安装mongod、配置用户访问、添删改查-CSDN博客 2、pom.xml文件内容如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns…...

momentJs推导日历组件

实现效果: 代码&#xff1a; 引入momentjs然后封装两个函数构建出基本数据结构 import moment from moment;// 某月有多少天 export const getEndDay (m) > m.daysInMonth();/*** description 获取本月空值数据* param { Date } year { } 年度* param { Number } month …...

Linux C/C++ 原始套接字:打造链路层ping实现

在C/C中&#xff0c;我们可以使用socket函数来创建套接字。我们需要指定地址族为AF_PACKET&#xff0c;协议为htons(ETH_P_ALL)来捕获所有传入和传出的数据包。 可以使用sendto和recvfrom函数来发送和接收数据包。我们需要构建一个合法的链路层数据包&#xff0c;在数据包的头…...

TCP 粘包/拆包

文章目录 概述粘包拆包发生场景解决TCP粘包和拆包问题的常见方法Netty对粘包和拆包问题的处理小结 概述 TCP的粘包和拆包问题往往出现在基于TCP协议的通讯中&#xff0c;比如RPC框架、Netty等 TCP 粘包/拆包 就是你基于 TCP 发送数据的时候&#xff0c;出现了多个字符串“粘”…...

【Spring Boot 3】应用启动执行特定逻辑

【Spring Boot 3】应用启动执行特定逻辑 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花…...

设计模式(行为型模式)观察者模式

目录 一、简介二、观察者模式2.1、事件接口及其实现2.2、观察者接口及其实现2.3、主题接口及其实现2.4、使用 三、优点与缺点 一、简介 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;它定义了一种一对多的依赖关系&#xff0c;当一个对象…...

Windows 版Oracle 数据库(安装)详细过程

首先到官网上去下载oracle64位的安装程序 第一步&#xff1a;将两个datebase文件夹解压到同一目录中。 当下载完成后,它里面是两个文件夹 win64_11gR2_database_1of2, win64_11gR2_database_2of2,我们需要把其中的一个database文件夹整合在一起(复制一个database文件夹到另一…...

编程实例分享,计费系统一定要安装灯光控制吗?佳易王计时计费管理系统软件V18.0教程说明

编程实例分享&#xff0c;计费系统一定要安装灯光控制吗&#xff1f;佳易王计时计费管理系统软件V18.0教程说明 一、前言 以下教程以 佳易王计时计费软件V18.0为例说明 1、该软件既可以接灯控&#xff0c;也可以不接灯控&#xff0c;如果接灯控&#xff0c;则点击开始计时的时…...

【webpack】优化提升

webpack优化提升 安装webpack相关内容向下兼容游览器-babel/polyfill进一步优化babel/polyfill模块联邦-共享模块如何提升构建性能通用环境下1&#xff0c;webpack更新到最新版本2&#xff0c;将loader应用于最少数量的必要模块3&#xff0c;引导&#xff08;每个额外的loader/…...

视频无损放大修复工具Topaz Video AI 新手入门教程

想要自学Topaz Video AI &#xff1f;Topaz Video AI 如何使用&#xff1f;这里给大家带来了视频无损放大修复工具Topaz Video AI 新手入门教程&#xff0c;快来看看吧&#xff01; 下载&#xff1a;Topaz Video AI for mac 导入您的文件 有两种方法可以将文件导入 Topaz Vid…...

《向量数据库指南》——Milvus Cloud 「部署」:简化部署一直在路上

“docker-compose 能部署分布式吗?”"单机部署为什么还依赖这么多组件?"“大家 Milvus Cloud 集群部署有没有实践过比较好的方案?” 作为一个开源数据库,是否能够进行快速部署,是所有工作的前提。在简化部署的道路上,社区从来没有停止过脚步。2023 年,社区推…...

使用x86架构+Nvidia消费显卡12G显存,搭建智能终端,将大模型本地化部署,说不定是未来方向,开源交互机器人设计

1&#xff0c;大模型本地部署 视频说明地址&#xff1a; https://www.bilibili.com/video/BV1BF4m1u769/ 【创新思考】&#xff08;1&#xff09;&#xff1a;使用x86架构Nvidia消费显卡12G显存&#xff0c;搭建智能终端&#xff0c;将大模型本地化部署&#xff0c;语音交互机…...

ESP32/ESP8266轻量级HA MQTT自动发现C++库

1. 项目概述 HA MQTT Discovery 是一个专为嵌入式平台&#xff08;特别是 ESP32/ESP8266&#xff09;设计的轻量级 C 库&#xff0c;用于实现与 Home Assistant 的原生 MQTT 自动发现&#xff08;Auto-Discovery&#xff09;协议兼容的设备与实体注册。其核心目标并非替代完整…...

从网吧到企业网:静态路由在小型网络中的3种典型应用场景

从网吧到企业网&#xff1a;静态路由在小型网络中的3种典型应用场景 在当今数字化商业环境中&#xff0c;网络连通性已成为各类企业运营的基础需求。对于中小型商业场所如连锁网吧、零售分店或小微企业分支机构而言&#xff0c;如何在有限预算下构建稳定可靠的网络架构&#xf…...

探索DevOps之路:2024年DevOps路线图

探索DevOps之路&#xff1a;2024年DevOps路线图 【免费下载链接】DevOps-Roadmap DevOps Roadmap for 2026. with learning resources 项目地址: https://gitcode.com/GitHub_Trending/de/DevOps-Roadmap 项目介绍 DevOps Roadmap 2024 是一个精心设计的步骤指南&#…...

研发物料管理新思路:巧用SAP预留功能实现打样耗材精准管控

研发物料管理新思路&#xff1a;巧用SAP预留功能实现打样耗材精准管控 在制造业研发部门&#xff0c;物料管理一直是令人头疼的难题。不同于生产线的标准化流程&#xff0c;研发活动往往伴随着频繁的设计变更、小批量试制和突发性物料需求。传统的手工台账或Excel表格管理方式&…...

T/SCSIA0018-2025《四川省信息技术应用创新项目费用测算标准》标准解读

此前四川省存量信息系统信创适配改造项目长期面临费用测算无统一标准、议价争议多、成本虚高、重复计费等行业痛点&#xff0c;给项目估算、审计、结算带来诸多困扰。2025年12月29日发布的T/SCSIA0018-2025《四川省信息技术应用创新项目费用测算标准》&#xff0c;作为省内首个…...

TIA Portal精智面板动画外观实战:从基础图形到变量控制

1. 精智面板动画外观入门指南 第一次接触TIA Portal的精智面板动画功能时&#xff0c;我被它强大的可视化能力惊艳到了。简单拖拽几个图形&#xff0c;关联PLC变量&#xff0c;就能实现酷炫的工业界面效果。下面我就用最直白的语言&#xff0c;带大家从零开始玩转这个功能。 首…...

未发表】“VMD-BKA-CNN-BiLSTM四模型多变量时序预测一键对比Matlab代码

【未发表】VMD-BKA-CNN-BiLSTM四模型多变量时序预测一键对比 Matlab代码 可用于风电预测&#xff0c;光伏预测等 基于变分模态分解结合黑翅鸳算法优化卷积神经网络结合双向长短期记忆神经网络的数据多变量时序预测一键对比 各种对比图都有 包含VMD-BKA-CNN-BiLSTM,VMD-CNN…...

老旧设备系统升级技术解析:4步实战指南让旧Mac焕发新生

老旧设备系统升级技术解析&#xff1a;4步实战指南让旧Mac焕发新生 【免费下载链接】OpenCore-Legacy-Patcher 体验与之前一样的macOS 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 老旧Mac设备升级macOS系统是许多用户面临的技术难题&am…...

函数信号发生器电路仿真、原理图及PCB设计

函数信号发生器电路仿真&#xff0c;原理图&#xff0c;PCB拆开手头的旧音响翻出几颗运放&#xff0c;突然想搞个函数信号发生器玩玩。这玩意儿说难不难&#xff0c;关键得让方波、三角波、正弦波乖乖听话。咱们今天直接从电路仿真干起&#xff0c;免得焊板子时炸电容。先上LTs…...

开源工具go-cursor-help:技术突破Cursor限制的效率提升方案

开源工具go-cursor-help&#xff1a;技术突破Cursor限制的效率提升方案 【免费下载链接】go-cursor-help 解决Cursor在免费订阅期间出现以下提示的问题: Youve reached your trial request limit. / Too many free trial accounts used on this machine. Please upgrade to pro…...