本文将介绍如何使用 JavaScript 创建文件,并自动/手动将文件下载。这在导出原始数据时会比较方便。

先上代码

/**
* 创建并下载文件
* @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 标签,模拟点击事件,自动下载成功,最后再回收内存。下面我们来看看具体是怎么操作的。

Blob 对象

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

拥有 2 个只读状态 OPENDCLOSED。大专栏  使用 JavaScript 创建并下载文件p>

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)对象下。

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

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

模拟 click

element.click();

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

小结

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

大家当时都玩的好开心啊,

最新文章

  1. C#操作Mongodb
  2. OpenBSD内核之引导MBR
  3. servlet中的相对路径和绝对路径 及/, ./, ../的区别
  4. 【NOI2011】道路修建 BFS
  5. Sharepoint学习笔记—习题系列--70-573习题解析 -(Q131-Q132)
  6. win + linux + android 多任务分屏
  7. html 字体加粗
  8. UIkit框架之UIimageview
  9. java web 学习一
  10. jquery.cookie.js使用介绍
  11. 【WC2013】糖果公园
  12. Jenkins在windows服务器上依赖的maven仓库目录
  13. 拿来主义:treeview插件父子节点问题
  14. 《Google软件测试之道》测试工程师
  15. java 中多播、广播编程
  16. Windows 使用windump进行循环抓包
  17. selenium之 chromedriver与chrome版本映射表(更新至v2.38)
  18. 46. linux下解压.tar.gz文件
  19. input pattern中常用的正则表达式
  20. php生成带自定义logo和带二维码跳转自定义地址的二维码

热门文章

  1. 1)PHP基础介绍
  2. 吴裕雄--天生自然 JAVA开发学习:抽象类
  3. Codeforces Round #524 (Div. 2)C 二维坐标系求俩矩形面积交
  4. python处理nii格式文件
  5. Metasploit详解
  6. CCP 协议
  7. vs编译完提示不支持尝试的执行操作
  8. Python与用户相交互
  9. iOS仿写有妖气漫画、视频捕获框架、启动页广告页demo、多种动画效果等源码
  10. 吴裕雄--天生自然 HADOOP大数据分布式处理:安装配置MYSQL数据库