js实现文件下载功能

两种JavaScript文件下载方法 阅读详情

一、a标签下载

<body>
	<button onClick="download()">a标签下载</button>
	<script>
		function download(url = 'http:www.xxx.com/download?name=file.pdf', fileName = '未知文件') {
	      const a = document.createElement('a');
	      a.style.display = 'none';
	      a.setAttribute('target', '_blank');
	      /*
	       * download的属性是HTML5新增的属性
	       * href属性的地址必须是非跨域的地址,如果引用的是第三方的网站或者说是前后端分离的项目(调用后台的接口),这时download就会不起作用。
	       * 此时,如果是下载浏览器无法解析的文件,例如.exe,.xlsx..那么浏览器会自动下载,但是如果使用浏览器可以解析的文件,比如.txt,.png,.pdf....浏览器就会采取预览模式
	       * 所以,对于.txt,.png,.pdf等的预览功能我们就可以直接不设置download属性(前提是后端响应头的Content-Type: application/octet-stream,如果为application/pdf浏览器则会判断文件为 pdf ,自动执行预览的策略)
	       */
	      fileName && a.setAttribute('download', fileName);
	      a.href = url;
	      document.body.appendChild(a);
	      a.click();
	      document.body.removeChild(a);
	    }
	</script>
</body>

优点:

  • 可以直接下载txt、png、pdf、exe、xlsx等类型文件

缺点:

  • a标签只能做get请求,所以url有长度限制
  • 无法获取下载进度
  • 跨域限制
  • 无法在header中携带token做鉴权操作
  • 无法判断接口是否成功
  • IE兼容问题

二、window.open下载

<body>
  <button onclick="download('http://www.xxx.com/download?name=file.pdf')">window.open下载</button>
  <script>
    function download(url) {
      window.open(url, '_self');
      /**
       *  _blank:在新窗口显示目标网页
       *  _self:在当前窗口显示目标网页
       *  _top:框架网页中在上部窗口中显示目标网页
      /**
    }
  </script>
</body>

优点:

  • 简单方便

缺点:

  • 会出现URL长度限制问题
  • 需要注意url编码问题
  • 无法获取下载进度
  • 无法在header中携带token做鉴权操作
  • 无法判断接口是否成功
  • 无法直接下载浏览器可直接预览的文件类型(txt、png、pdf会直接预览)

三、location.href 下载

<body>
  <button onclick="download('http://www.xxx.com/download?name=file.pdf')">location.href下载
  </button>
  <script>
    function download(url) {
      window.location.href = url;
    }
  </script>
</body>

优点

  • 简单方便直接
  • 可以下载大文件(G以上)

缺点

  • 会出现URL长度限制问题
  • 需要注意url编码问题
  • 无法获取下载进度
  • 无法在header中携带token做鉴权操作
  • 无法直接下载浏览器可直接预览的文件类型(txt、png、pdf会直接预览)
  • 无法判断接口是否返回成功

三、文件流转blob对象下载

 <button onclick="download()">文件流转blob对象下载</button>
 <script>
 	download() {
 		axios({
 			url: 'http://www.xxx.com/download',
 			method: 'get',
 			responseType: 'blob',
 		}).then(res => {
 			const fileName = res.headers.content-disposition.split(';')[1].split('filename=')[1];
 			const filestream = res.data;  // 返回的文件流
 			// {type: 'application/vnd.ms-excel'}指定对应文件类型为.XLS (.XLS的缩写就为application/vnd.ms-excel)
 			const blob = new Blob([filestream], {type: 'application/vnd.ms-excel'});
 			const a = document.createElement('a');
 			const href = window.URL.createObjectURL(blob); // 创建下载连接
		    a.href = href;
		    a.download = decodeURL(fileName );
		    document.body.appendChild(a);
	        a.click();
	        document.body.removeChild(a); // 下载完移除元素
	        window.URL.revokeObjectURL(href); // 释放掉blob对象
 		})
 	}
 </script>

优点:

  • 可以下载txt、png、pdf等类型文件
  • 可以在header中携带token做鉴权操作
  • 可以获取文件下载进度
  • 可以判断接口是否返回成功

缺点:

  • 兼容性问题,IE10以下不可用,注意Safari浏览器,官网给出 Safari has a serious issue with blobs that are of the type application/octet-stream
  • 将后端返回的文件流全部获取后才会下载
【JavaScript编程】前端实现文件下载 设置请求的响应类型为blob,这样就可以接收到文件流。然后,通过获取文件流创建Blob URL,来实现下载 阅读详情

相关推荐

JS结合layui实现文件预览、下载功能

JS结合layui实现文件预览、下载功能 这俩天做项目,需要做一个下载pdf的功能,但是需要实现客户点击文件先进行预览,然后预览界面得有下载按钮,提供下载。之前已经写过一篇直接下载的文章了,这篇主要记录一下预览功能; 用到的技术 :JS + layui(结合iframe) 一、html代码 <div class="grey-card jus-c ptb30 flex"> <div class="tc mlr50 cupointer" οnclick="getProjec

夏呆毛的博客 1万+

1分钟了解js如何实现下载文件功能的4种方式

1、a标签下载 —可以直接下载txt、png、pdf、exe、xlsx等类型文件。4、location.href 下载。3、window.open下载。2、new Blob下载。

qq_37174991的博客 2万+

实现网页截图与JS文件下载功能的JavaScript实践

html2canvas是一个流行的JavaScript库,它能够在用户的浏览器上将HTML内容渲染成Canvas元素。这意味着您可以直接从DOM元素(如Web页面上的部分或全部)生成图片,而无需服务器端的处理。它非常适合动态生成页面截图,用于导出报表、创建缩略图、数据可视化等场景。html2canvas支持大多数现代浏览器,包括IE9+,并能基本保持与原始HTML内容一致的样式表现。它通过模拟渲染引擎的工作过程,捕获DOM结构和CSS样式,并将这些信息渲染到Canvas上。

weixin_31659095的博客 1060

JavaScript 14种方法可以实现文件下载

接下来,创建一个下载链接,将 Blob URL 分配给链接的 href 属性,设置文件名以及其他选项,最后触发点击链接进行下载。只需调用相应的下载函数,并传入文件的 URL 和文件名,即可下载文件。然后,将 Blob URL 分配给下载链接的 href 属性,从而实现文件下载。它首先使用 fetch API 获取文件的二进制数据,并将其封装为 Blob 对象,然后调用 saveAs() 函数来触发文件下载。你可以通过在服务器端生成文件,并将用户重定向到该文件的 URL 来实现文件下载。函数来实现文件下载。

代码炼金术 3万+

夸克缓存视频合并小工具

原理 使用windows的命令行的copy命令来合并 copy /b 0+1+2+3 new.ts 分析缓存目录结构,发现都是一个m3u8文件带一个同名文件夹 所以分析m3u8并把原来的路径换成这个缓存文件夹路径并按顺序合并即可。 其中碰到的难点是Qprocess在windows不好使,索性直接存成.bat批处理文件再执行 还有就是中文问题,具体在代码里都说了。 代码 (环境Qt5.7.0) 这是mainwindow.h #ifndef MAINWINDOW_H #defin.

natural_Caduceus 1万+

windchill安装搭建(保姆式)

保姆式搭建windchill 材料准备 Vmware工具,用来创建和打开虚拟机的工具 安装系统的镜像文件 数据库安装文件,这里是Oracle数据库 Windchill的安装包 Vmware工具,用来安装和打开虚拟机的软件 Windowsserver2008的镜像工具,用来安装虚拟机环境的系统,如果你有win2007或win2010的也可以,在做虚拟机时,需要先安装系统。 Oracle数据库安装包 Windchill11M030的安装包 (安装包如有需要可以私信邮箱发送) 虚拟机安装 安装虚拟机VMware

tr1294937662的博客 6217

JavaScript 的 axios 实现文件下载功能

JavaScript 的 axios 实现文件下载功能

阿牛哥的博客 1873

IEEE Access投稿全流程解析:从初次提交到最终接收的完整指南

本文详细解析了IEEE Access期刊从初次投稿到最终接收的全流程,包括ORCID注册、论文投稿七步法、回稿再投流程及最终版提交等关键步骤。特别强调了4-6周快速同行评审的特点,为研究者提供了一份实用的投稿指南,帮助高效完成IEEE Access期刊投稿。

weixin_29273849的博客 915

javascript 实现文件下载功能

通过javascript 实现文件下载功能,本代码可判断下载的方式,是另存为还是下载文件,另存为是把网页保存到本地了。JS实现文件下载: 在页面上添加以下代码: 下载文件 保存本页面 temp.html代码:被下载的文件,在其内添加以下测试代码: if (typeof(window.opener) != 'undefined') //判断打开方式,若去掉后打开文件就弹出下载框{do

h_025的博客 2782

STM32 BootLoader 入门教程:从原理到 APP 跳转实现

在 STM32 项目开发中,BootLoader 通常用于实现固件升级、程序引导和应用程序校验。本文从最基础的 BootLoader 原理开始,讲解 STM32 内部 Flash 分区设计、APP 地址偏移、向量表重定位、BootLoader 跳转 APP 的核心代码,以及实际开发中常见的问题。本文适合刚开始接触 STM32 BootLoader、IAP 在线升级、串口升级、OTA 升级的开发者阅读。

lidecong133的博客 1667

Unity 之如何使用Pico4u锚点功能实现一个世界锁GameRoot

摘要 空间锚点技术是混合现实(MR)应用的核心,能永久记录虚拟物体的空间位置。文章介绍了在Unity中使用Pico SDK实现空间锚点的完整流程:1)环境配置需安装XR模块和Pico SDK;2)关键操作包括启动空间感知、创建/删除/查询/更新锚点;3)提供了经典应用案例,通过GameRoot节点实现场景固定和锚点同步。源码展示了基于XR交互工具包的锚点抓取与位置更新实现,为MR开发提供了实用参考方案。

TxNet 972

终极JavaScript文件下载指南:轻松实现浏览器文件保存功能

JavaScript文件下载是前端开发中常见但重要的功能需求。js-file-download作为一个轻量级、高效的JavaScript文件下载工具,能够帮助开发者轻松实现浏览器端文件下载功能,无需复杂的配置即可使用。📥 ## 什么是js-file-download? js-file-download是一个专门用于触发浏览器保存数据到文件的JavaScript库。它能够处理各种类型的数据,包

gitblog_00928的博客 516

Qt 【window udp 高频采集丢包问题】

使用Asio + 无锁队列或者环形缓存区方案可以解决 qt udp 在window平台高速采集 (128k)丢包问题。

weixin_45397344的博客 177

JavaScript文件下载终极指南:轻松实现前端文件下载功能

在现代Web开发中,**JavaScript文件下载**功能已经成为前端开发不可或缺的重要环节。无论是导出数据报表、下载用户生成的内容,还是实现文件分享功能,一个高效可靠的文件下载解决方案都能极大提升用户体验。😊 ## 🔥 为什么选择js-file-download库? **js-file-download**是一个轻量级但功能强大的JavaScript库,专门用于在浏览器中触发文件下载操

gitblog_00317的博客 410

工业级4~20mA转0~3V信号调理电路原理图设计,已量产(电流传感器)

在工业现场,4~20mA 电流信号是模拟量传输的 “老熟人”—— 抗干扰强、能跑长距离,但嵌入式 MCU 的 ADC 一般只认电压信号。最近做项目时,我设计了一款能覆盖 0~25mA(含超量程冗余)、线性输出 0~3V 的调理电路,经过现场调试挺稳定,分享下细节。

不脱发的程序猿 525

Unreal5从入门到精通之如何实现移动端触屏滑动手势

随着移动设备的普及,越来越多的游戏和应用选择在移动平台上发布。Unreal Engine 5(UE5)作为一款强大的游戏引擎,提供了丰富的工具和功能,帮助开发者打造出色的移动体验。UE5不仅提升了图形质量,还大幅简化了开发流程,使得开发者能够更专注于游戏设计和用户体验。在移动游戏中,触屏滑动手势是用户与应用互动的主要方式之一。然而,许多开发者在实现这些功能时常常遇到困难。为了填补这一知识空白,本篇文章将详细介绍如何在UE5中实现移动端触屏滑动手势,帮助你从入门到精通,提升你的开发技能。

TxNet 1136

js使用a标签实现文件下载功能

工作中遇到下载txt文本文件的下载需求,稍作整理,下载示例如下:

似水流年QC的博客 8541

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

uni-app x 组件指南:ad-custom 模板广告组件(广告单元、自动刷新与事件回调)

> 本文以 [docs/component/ad-custom.md](https://link.gitcode.com/i/fb83ac98b8395c13aaabc849fae923b0) 为核心,结合仓库内 ad 组件文档、App 端广告模块配置与示例页面源码,系统讲解 uni-app x 中 `ad-custom` 模板广告组件的平台支持、属性配置、事件处理与实战接入方式。读完本文,你将能

gitblog_00691的博客 486

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

纯js实现文件下载并重命名功能

纯js实现文件下载并重命名功能 来源: https://www.cnblogs.com/vipzhou/p/10700130.html /** * 获取 blob * @param {String} url 目标文件地址 * @return {cb} */ function getBlob(url,cb) { var xhr = new X...

dgce32897的博客 2260

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JS Ajax实现文件下载功能

js实现文件流转blob对象下载,Blob是xhr 2的内容,jquery不支持,所以,只能用原生XMLHttpRequest对象实现。

carrie7788的博客 1884

JavaScript 文件下载功能实现原理解析

本文介绍了一种无感知触发文件下载的前端实现方法。其核心原理是通过JavaScript动态创建隐藏的a标签,设置href和download属性后模拟点击事件实现自动下载。具体实现步骤包括:创建a标签DOM元素、配置下载路径和文件名、隐藏元素UI、挂载到文档树、触发点击事件下载文件,最后移除临时元素。这种方法无需用户交互,直接通过脚本完成文件下载,代码简洁高效,适用于需要后台静默下载的场景。

id_EquinoxFlower的博客 667

简单易用,基于js或vue项目实现一次批量文件下载功能

简单易用,基于js或vue项目实现一次批量文件下载功能

眾K的博客 485

如何用JavaScript File Download实现超简单文件下载功能

在现代Web开发中,实现文件下载功能往往需要复杂的后端处理和前端编码。但有了**JavaScript File Download**这个轻量级库,只需几行代码就能让浏览器直接保存数据为文件,彻底简化前端文件下载流程! ## ???? 30秒快速安装指南 安装过程比泡一杯咖啡还简单!打开终端输入以下命令,即可将这个强大的文件下载工具集成到你的项目中: ```bash npm install js-...

gitblog_01131的博客 950

javascript怎么实现文件上传和下载功能

我们使用 responseType 属性来告诉服务器,期望的响应类型是二进制数据,然后当请求完成时,我们使用 onload 事件来处理响应,并将响应的二进制数据转换成 Blob 对象,并创建一个链接以下载文件。通过了解这些内容,我们可以更好地处理文件上传和下载的需求。本文将探讨如何使用 JavaScript 实现文件上传和下载的功能,首先介绍基于 HTML5 的 File API,然后使用 jQuery 和 XMLHttpRequest 发送 AJAX 请求来实现文件上传和下载。

weixin_45525177的博客 363
上一篇: 封装el-table组件
下一篇: js手写实现各种函数
kaiup
博客等级 码龄7年 32粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值