js下载文件

HTML与文件下载

如果希望在前端直接出发某些资源的下载,最方便快捷的方法就是使用HTML5原生的download属性, 例如:

<a href="large.jpg" download>下载</a>

但显然,如果纯粹利用HTML属性来实现文件的下载(而不是浏览器打开或浏览),对于动态内容,就无能为力。

例如,我们对于页面进行分享的时候,希望分享图片是页面内容的实时截图,此时,这个图片就是动态的,纯HTML显然无法满足我们的需求,借助JS和其他一些HTML5特性,例如,将页面元素转换到canvas上,然后在转成图片进行下载。

单只是完成图片的下载不能满足日常业务的需求,对于业务需求是远远不够的。

借助HTML5 Blob实现文本信息文件下载

如果对Blob不了解,可以先看看张鑫旭的理解DOMString、Document、FormData、Blob、File、ArrayBuffer数据类型一文。

原理其实很简单,我们可以将文本或者JS字符串借助Blob转换成二进制,然后,作为a元素的href属性,配合download属性,实现下载。

代码也比较简单,如下示例(兼容Chrome和FireFox):

复制代码
var funDownload = function(content, filename){// 创建隐藏的可下载链接var eleLink = document.createElement('a');eleLink.download = filename;eleLink.style.display = 'none';// 字符内容转变成blob地址var blob = new Blob([content]);eleLink.href = URL.createObjectURL(blob);// 触发点击document.body.appendChild(eleLink);eleLink.click();// 然后移除document.body.removeChild(eleLink);
};
复制代码

其中,content指需要下载的文本或者字符串内容,filename指下载到系统中的文件名称。

借助Base64实现任一文件下载

对于非文本文件,也是可以直接JS触发下载的,例如,如果我们想下载一张图片,可以把这张图片转换成Base64格式,然后下载。

代码示例:

复制代码
var funDownload = function(domImg, filename){// 创建隐藏的可下载链接var eleLink = document.createElement('a');eleLink.download = filename;eleLink.style.display = 'none';// 图片base64地址var canvas = document.createElement('canvas');var context = canvas.getContext('2d');var width = domImg.natureWidth;var height = domImg.natureHeight;context.drawImage(domImg, 0, 0);// 如果是PNG图片,则context.toDataURL('image/png');eleLink.href = context.toDataURL('image/jpeg');// 触发点击document.body.appendChild(eleLink);eleLink.click();// 移除document.body.removeChild(eleLink);
};
复制代码

不止是.html文件,.txt,.json等只要内容是文本的文件,都可以利用这种小技巧实现下载。

在Chrome浏览器下,模拟点击创建的a元素及时不append到页面中,也是可以触发下载的,但是在FireFox浏览器中却不行,因此,上面的funcDownload()方法有一个appendChild和removeChild的处理,就是为了兼容FireFox浏览器。

继续说实现在下CSV文件的方法

我们通过ajax从后端请求到的数据一般都是json格式,也就是说需要把json数据转成csv格式的数据,经过寻找终于找到了一个比较好用的json转csv的工具。

直接上示例代码:

复制代码
<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Download</title><link rel="stylesheet" href="">
</head>
<body><div class="demo"><p><input type="button" value="作为test.html文件下载"></p></div><script src="json2csv.js" type="text/javascript" charset="utf-8"></script><script type="text/javascript" charset="utf-8">// 示例数据var fields = ['car', 'price', 'color'];var myCars = [{"car": "Audi","price": 40000,"color": "blue"}, {"car": "BMW","price": 35000,"color": "black"}, {"car": "Porsche","price": 60000,"color": "green"}];// json数据转csv格式var csv = json2csv({ data: myCars, fields: fields });var eleButton = document.querySelector('input[type="button"]');// 下载文件方法var funDownload = function (content, filename) {var eleLink = document.createElement('a');eleLink.download = filename;eleLink.style.display = 'none';// 字符内容转变成blob地址var blob = new Blob([content]);eleLink.href = URL.createObjectURL(blob);// 触发点击document.body.appendChild(eleLink);eleLink.click();// 然后移除document.body.removeChild(eleLink);};if ('download' in document.createElement('a')) {// 作为test.html文件下载eleButton.addEventListener('click', function () {funDownload(csv, 'test.csv');    });} else {eleButton.onclick = function () {alert('浏览器不支持');    };}</script>
</body>
</html>

 

转载于:https://www.cnblogs.com/haojf/p/9407183.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/485524.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

二十世纪的十大科学骗局

来源&#xff1a;扬子晚报一般来说科学本是最讲求真实性的&#xff0c;但近些年来所谓轰动一时的科学“成果”中&#xff0c;却颇多假冒伪劣产品。1、百慕大“死亡三角”在众多科学骗局中&#xff0c;“百慕大”传说是影响最大且流传最广的一例&#xff0c;但它的起因只是第二次…

html 文本框 初始化,Flutter 文本框初始化时显示默认值

刚开始作Flutter文本框时候&#xff0c;使用的是TextField。彷佛大多数状况下都没有问题。代码形式以下&#xff1a;htmlclass _FooState extends State {TextEditingController _controller;overridevoid initState() {super.initState();_controller new TextEditingControl…

复杂性系统面临的难题

来源&#xff1a;人机与认知实验室1 什么是复杂性目前无法表述清楚在汉语中“复杂”一词的意思为“事物的种类、头绪等多而杂”。在《朗文当代英语词典》中&#xff0c;形容词complex被解释为&#xff1a;(1)难于理解、解释或处理&#xff0c;不清楚或不简单&#xff1b; (2)由…

MySQL优化(2)--------常用优化

前言 之前已经简单介绍了MySQL的优化步骤&#xff0c;那么接下来自然而是就是常用的SQL优化&#xff0c;比如inseer、group by等常用SQL的优化&#xff0c;会涉及SQL语句内部细节&#xff08;这正是我缺乏的&#xff09;。最后希望自己能记录完成的一套MySQL优化博文&#xff0…

码元,波特,速率,带宽

码元&#xff1a;一个固定时长的信号波形&#xff0c;代表不同离散数值的基本波形 1码元可以携带多个比特的信息量 例如&#xff1a;下图就称为二进制码元&#xff0c;因为只有两种状态&#xff0c;一种代表0状态&#xff0c;一种代表1状态 还有其他进制码元 时长称为码元宽…

大爆炸之前的宇宙是什么样子?|赠书

来源&#xff1a;科研圈宇宙蛋难题古代的创世神话往往表现出奇妙的独创性&#xff0c;但是追根究底&#xff0c;它们只有两个基本的选择&#xff1a;宇宙要么是在有限的时间以前被创造的&#xff0c;要么就是永恒存在的。以下是神圣的印度教经文《奥义书》中描述的场景&#xf…

js获取html样式属性,js怎么获取指定css属性的值?

js怎么获取指定css属性的值&#xff1f;下面本篇文章给大家介绍一下。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对大家有所帮助。js怎么获取指定css属性的值&#xff1f;1、通过dom.style.属性 来获取但是这种方法无法获取id、class里的属性例子:…

奈氏准则,香农定理

失真 现实中的信道(带宽受限&#xff0c;有噪声&#xff0c;干扰)&#xff0c;导致一些信号发生问题 影响失真的因素&#xff1a; 码元传输速率&#xff08;越快&#xff0c;失真越严重&#xff09; 信号传输距离&#xff08;越远越严重&#xff09; 噪声干扰 传输媒体质…

IBM中国研究院被曝已全面关闭

来源&#xff1a;AI科技评论作者&#xff1a;青暮AI科技评论最新消息&#xff0c;网传IBM中国研究院&#xff08;IBM CRL&#xff09;已经全面关闭。AI科技评论求证圈内权威人士&#xff0c;其表示消息大概率属实。IBM研究院是IBM公司的一个&#xff08;研究&#xff09;部门&a…

图形化安装配置:安装oracle、新建数据库、用plsql连接oracle,套路明白了其实挺简单...

1&#xff1a;安装oracle。 我的安装路径是c:\app&#xff0c;那oracle_home就是&#xff1a;C:\app\guestAdmin\product\11.2.0\dbhome_1。 装完后菜单在这里&#xff1a; 2&#xff1a;创建数据库his&#xff0c;注意&#xff1a;oracle的每个数据库&#xff0c;都是一个服务…

细数高光时刻,2020全球科技巨头如何激战AI?

来源&#xff1a;嵌入式资讯精选本文作者&#xff1a;Jiachang Pan编辑&#xff1a;SV Insight最近&#xff0c;百度、谷歌等多家科技巨头相继发布2020年AI发展总结。2020年12月30日&#xff0c;百度以一篇万字长文《百度AI的2020》向2020年告别。2021年1月12日&#xff0c;谷歌…

数据编码信号调制

信道上传送的信号也可以分为&#xff1a; 基带信号&#xff1a;将数字信号1&#xff0c;0直接用两种不同的电压表示&#xff0c;再送到数字信道上去传输 直接表达了要输出的信息的信号。 基带信号在数字信道上去传输&#xff0c;就叫做基带传输 宽带信号&#xff1a;将基带…

人为什么要学数学 ——数学意义的哲学思考

来源&#xff1a;算法与数学之美编辑 ∑Gemini人为什么要学数学&#xff1f;其实很多人并不清楚&#xff0c;甚至存在许多认识误区&#xff0e;有学生认为&#xff0c;“数学除了买东西的时候有点用&#xff0c;考试的时候有点用&#xff0c;没有多大的实际用途&#xff0e;”还…

html标签始终在右下角,html+javascript实现图片始终在页面右下角

标题页function setVariables() {imgwidth235; //图像的宽度imgheight19; //图像的高度if (navigator.appName "Netscape") { //netscape下的位置设置horz".left";vert".top";docStyle"document.";styleDoc"";innerW"…

Gary Marcus:AI 可以从人类思维中学习的11个启示

来源&#xff1a;AI科技评论作者&#xff1a;Gary Marcus、Ernest Davis编译&#xff1a;陈彩娴1969 年图灵奖得主、MIT 人工智能实验室创始人马文明斯基&#xff08;Marvin Minsky&#xff09;在其1986年著作《心智社会》&#xff08;The Society of Mind&#xff09;一书中曾…

我们的大脑,足以理解大脑本身吗?

来源&#xff1a; 利维坦树突&#xff08;红色&#xff09;神经元的分支过程&#xff0c;接收突触信息的突出棘的渲染&#xff0c;以及来自小鼠大脑皮层的饱和重建&#xff08;多色圆柱体&#xff09;。© Lichtman Lab at Harvard University利维坦按&#xff1a;关于大脑…

Leetcode--17.电话号码的字母组合

给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例: 输入&#xff1a;"23" 输出&#xff1a;["ad", "ae", "af…

安全技术可以采用计算机安全,2017年计算机三级《信息安全技术》习题

2017年计算机三级《信息安全技术》习题信息安全技术主要培养熟练掌握网络设备的安装、管理和维护&#xff0c;能分析企业网络和信息系统安全漏洞、及时解决网络安全问题&#xff0c;并能够根据企事业单位业务特点设计制作安全的电子商务/政务网站的专业人员。以下是小编整理的2…

福布斯:14位技术专家预测,未来哪些行业将被AI颠覆?

来源&#xff1a;Forbes转自&#xff1a;新智元未来&#xff0c;哪些行业将从人工智能中受益&#xff1f;14位技术专家对哪些行业和部门最终将从AI中受益最大进行了预测。哪些行业将受益于AI&#xff1f;目前&#xff0c;人工智能和机器学习已进入许多不同的行业&#xff0c;改…

打开AI芯片的“万能钥匙”

来源&#xff1a;雷锋网 作者&#xff1a;包永刚雷锋网按&#xff0c;新推出的AI芯片因架构的独特性和软件的易用性增加了客户尝试和迁移的成本&#xff0c;因此&#xff0c;软件成为了能否快速、低成本迁移的关键。现在普遍的做法是在TensorFlow写一些后端集成新硬件&#xff…