使用 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 相关文章推荐
IE浏览器PNG图片透明效果代码
Sep 02 Javascript
网页中的图片的处理方法与代码
Nov 26 Javascript
ComboBox 和 DateField 在IE下消失的解决方法
Aug 30 Javascript
基于javascript实现全屏漂浮广告
Mar 31 Javascript
分享jQuery封装好的一些常用操作
Jul 28 Javascript
js发送短信倒计时的简单实现方法
Sep 08 Javascript
AngularJS指令用法详解
Nov 02 Javascript
Bootstrap CSS布局之图像
Dec 17 Javascript
jQuery简单实现MD5加密的方法
Mar 03 Javascript
JS简单判断滚动条的滚动方向实现方法
Apr 28 Javascript
webpack多入口多出口的实现方法
Aug 17 Javascript
微信小程序实现canvas分享朋友圈海报
Jun 21 Javascript
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懒人函数 自动添加数据
2011/06/28 PHP
PHP 使用memcached简单示例分享
2015/03/05 PHP
PHP实现获取毫秒时间戳的方法【使用microtime()函数】
2019/03/01 PHP
详细讲解JS节点知识
2010/01/31 Javascript
js跨域访问示例(客户端/服务端)
2014/05/19 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
JS实现滑动门效果的方法详解
2016/12/19 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
vue组件编写之todolist组件实例详解
2018/01/22 Javascript
vuex页面刷新后数据丢失的方法
2019/01/17 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
Vue.js中的组件系统
2019/05/30 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
vue 实现在同一界面实现组件的动态添加和删除功能
2020/06/16 Javascript
Python对list列表结构中的值进行去重的方法总结
2016/05/07 Python
python 禁止函数修改列表的实现方法
2017/08/03 Python
python中requests爬去网页内容出现乱码问题解决方法介绍
2017/10/25 Python
python3实现字符串操作的实例代码
2019/04/16 Python
django最快程序开发流程详解
2019/07/19 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
pytorch载入预训练模型后,实现训练指定层
2020/01/06 Python
python计算波峰波谷值的方法(极值点)
2020/02/18 Python
使用ITK-SNAP进行抠图操作并保存mask的实例
2020/07/01 Python
Janie and Jack美国官网:GAP旗下的高档童装品牌
2019/09/09 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
汇智创新科技发展有限公司
2015/12/06 面试题
Python里面如何实现tuple和list的转换
2012/06/13 面试题
应届毕业生的自我鉴定
2013/11/13 职场文书
开办加工厂创业计划书
2014/01/03 职场文书
高一家长会邀请函
2014/01/12 职场文书
毕业生求职信
2014/06/10 职场文书
年终工作总结范文2014
2014/11/27 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android