使用 JavaScript 创建并下载文件(模拟点击)


Posted in Javascript onOctober 25, 2019

先上代码

/**
 * 创建并下载文件
 * @param {String} fileName 文件名
 * @param {String} content 文件内容
 */
function createAndDownloadFile(fileName, content) {
 var aTag = document.createElement('a');
 var blob = new Blob([content]);
 aTag.download = fileName;
 aTag.href = URL.createObjectURL(blob);
 aTag.click();
 URL.revokeObjectURL(blob);
}

很简单对吧,直接调用这个方法,传入文件名和文件内容,程序新建 a 标签,新建 Blob 对象,将文件名赋给 a 标签,同时将 Blob 对象作为 Url 也赋给 a 标签,模拟点击事件,自动下载成功,最后再回收内存。下面我们来看看具体是怎么操作的。

使用 JavaScript 创建并下载文件(模拟点击)

Blob 对象

Blob 对象是一个字节序列。拥有 size 和 type 等属性。

拥有 2 个只读状态 OPEND 和 CLOSED

Blob 对象属于 JavaScript Web APIs 中的 File API 规定的部分,可以参考 W3C 文档中的 The Blob Interface and Binary Data

再回来看看我们的代码里是这么写的,使用了 Blob 的构造函数:

var blob = new Blob([content]);

使用方括号的原因是,其构造函数的参数为以下4中:

  • ArrayBuffer [TypedArrays] elements.
  • ArrayBufferView [TypedArrays] elements.
  • Blob elements.
  • DOMString [WebIDL] elements.

所谓 ArrayBuffer 是一种用于呈现通用、固定长度的二进制数据的类型。详情可以参考 ArrayBuffer -MDN 以及 ECMAScript2015 标准中的 ArrayBuffer。

Blob URLs

Blob URLs 被创建或注销是使用 URL 对象上的方法。这个 URL 对象被挂在 Window (HTML) 对象下,或者 WorkerGlobalScope (Web Workers)对象下。

拥有以下静态方法 createObjectURL 和 revokeObjectURL,用于创建一个 blob 对象的 url 和注销这个 blob url。

详情可查看 关于创建和注销 Blob URL 的 W3C 标准文档

模拟 click

element.click();

在 W3C 中很早就有这个规范,不需要写繁琐的模拟事件触发的代码。

小结

目前我将这个技术使用在 天猫双十一技术和UED庆功会 的摇火箭大屏游戏中。最后的游戏结果排名,在请求了接口后,在前端直接生成并下载到了本地,作为记录保存。主要也是因为服务端暂时没有提供这个一张表去记录游戏结果,于是采用了前端记录的解决方案。

大家当时都玩的好开心啊,?。你们的甘其食和全家卡的名单就是这样生成的!

Javascript 相关文章推荐
通过JAVASCRIPT读取ASP设定的COOKIE
Nov 24 Javascript
Mootools 1.2教程 选项卡效果(Tabs)
Sep 15 Javascript
JavaScript 学习笔记(九)call和apply方法
Jan 11 Javascript
javascript实现切换td中的值
Dec 05 Javascript
JS实现可展开折叠层的鼠标拖曳效果
Oct 09 Javascript
浅析AngularJs HTTP响应拦截器
Dec 28 Javascript
jQuery简单获取键盘事件的方法
Jan 22 Javascript
node.js的Express服务器基本使用教程
Jan 09 Javascript
JavaScript之解构赋值的理解
Jan 30 Javascript
ES6中let、const的区别及变量的解构赋值操作方法实例分析
Oct 15 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
Nov 17 Vue.js
Vue.Draggable实现交换位置
Apr 07 Vue.js
js前端如何写一个精确的倒计时代码
Oct 25 #Javascript
对layui数据表格动态cols(字段)动态变化详解
Oct 25 #Javascript
layui实现数据表格隐藏列的示例
Oct 25 #Javascript
关于在LayUI中使用AJAX提交巨坑记录
Oct 25 #Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 #Javascript
详解如何在Vue项目中发送jsonp请求
Oct 25 #Javascript
layui实现form表单同时提交数据和文件的代码
Oct 25 #Javascript
You might like
Oracle 常见问题解答
2006/10/09 PHP
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
php实现生成验证码实例分享
2016/04/10 PHP
js下关于onmouseout、事件冒泡的问题经验小结
2010/12/09 Javascript
jQuery EasyUI API 中文文档 - Parser 解析器
2011/09/29 Javascript
js时间比较示例分享(日期比较)
2014/03/05 Javascript
jquery 操作两个select实现值之间的互相传递
2014/03/07 Javascript
jquery如何判断表格同一列不同行input数据是否重复
2014/05/14 Javascript
web前端设计师们常用的jQuery特效插件汇总
2014/12/07 Javascript
js使用DOM设置单选按钮、复选框及下拉菜单的方法
2015/01/20 Javascript
Jquery代码实现图片轮播效果(一)
2015/08/12 Javascript
JS禁用页面上所有控件的实现方法(附demo源码下载)
2015/12/17 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
整理关于Bootstrap表单的慕课笔记
2017/03/29 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
JS实现的A*寻路算法详解
2018/12/14 Javascript
jQuery实现文本显示一段时间后隐藏的方法分析
2019/06/20 jQuery
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
JS前后端实现身份证号验证代码解析
2020/07/23 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
django模型中的字段和model名显示为中文小技巧分享
2014/11/18 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
Python求两点之间的直线距离(2种实现方法)
2019/07/07 Python
对python 中re.sub,replace(),strip()的区别详解
2019/07/22 Python
python将时分秒转换成秒的实例
2019/12/07 Python
python默认参数调用方法解析
2020/02/09 Python
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
外语系毕业生自荐信范文
2013/12/16 职场文书
韩国商务邀请函
2014/01/14 职场文书
投标承诺函格式
2015/01/21 职场文书
2016年社区植树节活动总结
2016/03/16 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
PyTorch的Debug指南
2021/05/07 Python