使用 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 相关文章推荐
解析js如何获取当前url中的参数值并复制给input
Jun 23 Javascript
JS延迟加载加快页面打开速度示例代码
Dec 30 Javascript
将HTML的左右尖括号等转义成实体形式的两种实现方式
May 04 Javascript
jQuery实现二级下拉菜单效果
Jan 05 Javascript
Vue.js父与子组件之间传参示例
Feb 28 Javascript
JS利用正则表达式实现简单的密码强弱判断实例
Jun 16 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
Jun 25 Javascript
swiper动态改变滑动内容的实现方法
Jan 17 Javascript
微信小程序新手教程之启动页的重要性
Mar 03 Javascript
vue项目使用高德地图的定位及关键字搜索功能的实例代码(踩坑经验)
Mar 07 Javascript
Vue使用轮询定时发送请求代码
Aug 10 Javascript
vue从后台渲染文章列表以及根据id跳转文章详情详解
Dec 14 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
php生成rss类用法实例
2015/04/14 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
既简单又安全的PHP验证码 附调用方法
2016/06/02 PHP
php strftime函数获取日期时间(switch用法)
2018/05/16 PHP
基于jQuery的动态表格插件
2011/03/28 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
jQuery实现按键盘方向键翻页特效
2015/03/18 Javascript
javascript基础语法学习笔记
2016/01/04 Javascript
JavaScript判断数组是否存在key的简单实例
2016/08/03 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
JavaScript实现百度搜索框效果
2020/03/26 Javascript
Less 安装及基本用法
2018/05/05 Javascript
JavaScript中Dom操作实例详解
2019/07/08 Javascript
vue实现标签云效果的方法详解
2019/08/28 Javascript
JS eval代码快速解密实例解析
2020/04/23 Javascript
js+css实现全屏侧边栏
2020/06/16 Javascript
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python生成tensorflow输入输出的图像格式的方法
2018/02/12 Python
python爬虫可以爬什么
2020/06/16 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
五款漂亮的纯CSS3动画按钮的实例教程
2014/11/21 HTML / CSS
经典优秀个人求职自荐信格式
2013/09/25 职场文书
护理专业毕业生自荐信范文
2014/01/05 职场文书
学习党章思想汇报
2014/01/07 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
代收款委托书范本
2014/10/01 职场文书
教学督导岗位职责
2015/04/10 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
python实现ROA算子边缘检测算法
2021/04/05 Python
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
深入解析MySQL索引数据结构
2021/10/16 MySQL
CSS精灵图的原理与使用方法介绍
2022/03/17 HTML / CSS