在JavaScript中进行文件处理,第二部分:文件读取
译注:原文是《JavaScript高级程序设计》的作者Nicholas Zakas写的,本翻译纯属为自己学习而做,仅供参考。原文链接:这里
在我的前一篇blog中,我介绍了在JavaScript中如何使用文件,具体重点放在如何获得File对象。只有当用户通过上传或者拖拽的方式上传了文件,这些对象才拥有文件的元数据。一旦你有了这些文件,下一步就是从这些文件中读取数据。
FileReader 类型
FileReader类型有一个单一的工作,就是从一个文件中读取数据并存储在一个JavaScript变量中。它的API有意设计得与XMLHttpRequest相同,因为它们都是从一个外部资源(浏览器之外)加载数据。读操作是异步的,这样不会使浏览器堵塞。
FileReader可以创建多种格式来表示文件的数据,而当读取文件时返回的格式是必须的。读取操作是通过调用下面任一方法来完成的:
- readAsText() – 使用纯文本的形式返回文件内容
- readAsBinaryString() – 使用加密二进制数据字符串的形式来返回文件内容(该方法已废弃,请使用readAsArrayBuffer()代替)
- readAsArrayBuffer() – 使用ArrayBuffer的形式来返回文件内容(对二进制数据比如图像文件有用)
- readAsDataURL() – 使用数据URL的形式返回文件内容
像XHR对象的send方法会发起一个Http请求一样,上面的每个方法都会启动一个文件读取。就这一点来说,在开始读取之前,你必须监听load事件,event.target.result总是返回读取的结果。例如:
1 |
|
在这个例子中,我们简单地读取文件内容,并将内容以纯文本的形式输出到console。当文件被成功读取时会调用onload操作,而因为某些原因无法读取时会调用onerror操作。在事件处理器中可以通过event.target来获得FileReader实例,而且它推荐这样使用,而不是直接使用reader变量。result属性包含读取成功时的文件内容和读取失败时的错误信息。
读取数据URI
你可以用差不多的方法来将文件读取为一个数据URI,数据的URI(有时也叫数据URL)是个有趣的选项,比如你想要显示从磁盘上读取的图像文件,你可以用下面的代码这样做:
1 |
|
这段代码简单地在页面上插入一个从磁盘上读取来的图像文件。因为这个数据URI包含了图像的所有数据,所以它可以被直接传给图像的src属性,并显示在页面上。你可以交替地加载图像和将其绘制到一个<canvas>上:
1 |
|
这段代码将图像数据加载到一个新的Image对象,并将其绘制到一个画布上(宽度和长度都指定为100)。
数据URI一般用来做这个,但能用在任何类型的文件上。将文件读取为一个数据URI最普遍的用法是在web页面中快速显示文件内容。
读取ArrayBuffers
ArrayBuffer类型[1]最初是作为WebGL的一部分被引进的。一个Arraybuffer代表一个有限的字节数,可以用来存储任意大小的数字。读取一个ArrayBuffer数据的方式需要一个特定的视图,比如Int8Array是将其中的字节处理为一个有符号的8位整数集合,而Float32Array是将其中的字节处理为一个32位浮点数的集合。这些称为类型数组[2],这样可以强制你工作在一个特定的数字类型上,而不是包含任意类型的数据(像传统的数组)。
当处理二进制文件时你可以优先使用ArrayBuffer,这样对数据可以有更细粒度的控制。要解释关于ArrayBuffer的所有ins和outs已经超出本篇blog的范围,你只需要知道在你需要的时候可以很容易地将一个文件读取为一个ArrayBuffer就可以了。你可以直接传一个ArrayBuffer到一个XHR对象的send()方法,发送原始数据到服务器(你会在服务器的请求中读取这个数据去重建文件),只要你的浏览器完全支持XMLHttpRequest Level 2[3](大部分最新的浏览器,包括IE10和Opera12都支持)。
下集预告
使用FileReader读取文件数据相当简单。如果你知道怎么使用XMLHttpRequest, 那么你肯定知道怎么从文件中读取数据。在这个系列的下一章,你将学到更多有关如何使用FileReader事件和理解更多潜在错误的内容。
相关链接
在JavaScript中进行文件处理,第二部分:文件读取的更多相关文章
- eclipse中通过search打开第二个文件时 第一个文件就自己关闭了
原文:http://blog.csdn.net/u014079773/article/details/66971053 问题:eclipse中通过search打开第二个文件时第一个文件就自己关闭了 问 ...
- JavaScript中replace()方法的第二个参数解析
语法 string.replace(searchvalue,newvalue) 参数值 searchvalue 必须.规定子字符串或要替换的模式的 RegExp 对象.请注意,如果该值是一个字符串,则 ...
- javaScript中利用ActiveXObject来创建FileSystemObject操作文件
注:如果用javascript读本地文件,遇到安全问题. 需在浏览器中进行设置,如下: 工具—> Internet选项->安全->自定义级别->启用“没有标识为安全的A ...
- JavaScript中ActiveXObject操作本地文件夹
在Windows平台上, js可以调用很多Windows提供的ActivexObject,本文就使用js来实现文档处理, 和使用js编写ActiveX做一个简单介绍. <!DOCTYPE HTM ...
- Win10系列:JavaScript 项目模板中的文件和项模板文件
通过上面内容的学习,相信读者已经对各种项目模板和项模板有了大致的了解,本节将进一步介绍项目模板中默认包含的项目文件以及项模板文件,首先讲解这些文件中的初始内容以及作用,然后介绍在一个页面中如何添加控件 ...
- 在JavaScript中进行文件处理,第一部分:基础
译注:原文是<JavaScript高级程序设计>的作者Nicholas Zakas写的,本翻译纯属为自己学习而做,仅供参考.原文链接:这里 很多年前,我在一次Goole面试被问到,如何在w ...
- 在JavaScript中进行文件处理,第五部分:Blobs
译注:原文是<JavaScript高级程序设计>的作者Nicholas Zakas写的,本翻译纯属为自己学习而做,仅供参考.原文链接:这里 到目前为止,这个系列的帖子集中在和这些文件交互- ...
- JavaScript中使用ActiveXObject操作本地文件夹的方法
转载地址 http://www.jb51.net/article/48538.htm 在Windows平台上, js可以调用很多Windows提供的ActivexObject,本文就使用js来实 ...
- 前端学习 第二弹: JavaScript中的一些函数与对象(1)
前端学习 第二弹: JavaScript中的一些函数与对象(1) 1.apply与call函数 每个函数都包含两个非继承而来的方法:apply()和call(). 他们的用途相同,都是在特定的作用域中 ...
随机推荐
- loki之内存池SmallObj[原创]
loki库之内存池SmallObj 介绍 loki库的内存池实现主要在文件smallobj中,顾名思义它的优势主要在小对象的分配与释放上,loki库是基于策略的方法实现的,简单的说就是把某个类通过模板 ...
- 【Loadrunner】LR破解版录制手机脚本
LR破解版录制手机脚本 最近在网上听到好多童鞋都在问如何用LR做手机性能测试,恰好自己对这方面也挺感兴趣,经过查阅很多资料,形成此文档以做备注~!如果有感觉我写的不对的地方,敬请指正 ...
- python __init__ 构造函数
实例化过程 会执行__init__ 的函数方法 class SQLHelper: def __init__(self): # self = s1 print("helo") def ...
- PAT 1117 Eddington Number [难]
1117 Eddington Number (25 分) British astronomer Eddington liked to ride a bike. It is said that in o ...
- STL学习笔记--各种容器的运用时机
如何选择最佳的容器类别? 缺省情况下应该使用vector.vector的内部结构简单,并允许随机存取,所以数据的存取十分方便灵活,数据的处理也够快. 如果经常要在序列的头部和尾部安插和移除元素,应采用 ...
- Visual Studio Code常用设置
Visual Studio Code常用设置 • 自动保存设置 ▶ 文件(F) -> 首选项(P) -> 用户设置(U) ▶ 将"files.autoSave": &q ...
- [golang note] 协程通信
channel基本语法 • channel介绍 √ golang社区口号:不要通过共享内存来通信,而应该通过通信来共享内存. √ golang提供一种基于消息机制而非共享内存的通信模型.消息机制认为每 ...
- VS2010/MFC编程入门之九(对话框:为控件添加消息处理函数)
创建对话框类和添加控件变量在上一讲中已经讲过,这一讲的主要内容是如何为控件添加消息处理函数. MFC为对话框和控件等定义了诸多消息,我们对它们操作时会触发消息,这些消息最终由消息处理函数处理.比如我们 ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON DispArc
zw版[转发·台湾nvp系列Delphi例程]HALCON DispArc zw版[转发·台湾nvp系列Delphi例程]HALCON DispArc----------RAD Studio XE D ...
- gstreamer调试命令
gplay播放命令 gplay 文件全路径 (eg:gplay 123.mp3) gstreamer播放命令 gst-launch playbin2 uri=file:///文件全路径 (eg gs ...