[转]JavaScript文件操作(2)-FileReader
在上篇文章中,我介绍了在JavaScript操作文件,重点讲了如何取得File对象。 这些对象包含的文件的元数据在上传或者拖放到浏览器中时可以获取到。有了文件当然接下来就是读取文件了。
FileReader
FileReader 功能很简单: 从文件中读取数据和保存到JS变量中。此API特意设计成跟XMLHttpRequest 一样因为都是从外部读取数据。读取过程都是异步的不会造成浏览器阻塞。
FileReader 可以返回几种格式来文件数据的格式, 而且这些格式在读取文件时是必须的。通过以下几个方法可以宣告读取完毕:
readAsText()– 返回文件内容的纯文本格式readAsBinaryString()–返回文件内容的二进制格式 (不推荐– 推荐使用readAsArrayBuffer())readAsArrayBuffer()– 返回文件内容的ArrayBuffer格式(图片文件推荐使用)readAsDataURL()– 返回文件内容的 data URL格式
这些格式都应在文件读取操作前初始化好比 XHR 对象的 send()方法前要初始化一个 HTTP 请求一样。同样的,开始读取之前你还是要监听 load 事件。读取的结果从 event.target.result 获取。例如:
|
1
2
3
4
5
6
7
8
9
10
11
|
var reader = new FileReader();reader.onload = function(event) { var contents = event.target.result; console.log("File contents: " + contents);};reader.onerror = function(event) { console.error("File could not be read! Code " + event.target.error.code);};reader.readAsText(file); |
以上示例将文件以纯文本输出。文件读取成功则执行 onload 方法否则执行 onerror 方法。 FileReader 的实例可以直接从event.target中取到而且推荐这么取而不是直接用 reader 变量.。 result 属性包含有文件的内容, success 和 error 包含有成功与失败的信息。
读取 data URIs
读取 data URI 的步骤大致相同。Data URIs (有时称 data URLs) 有时是个不错的选择,比如,直接显示从硬盘上读到的图片 ,案例参考:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
var reader = new FileReader();reader.onload = function(event) { var dataUri = event.target.result, img = document.createElement("img"); img.src = dataUri; document.body.appendChild(img);};reader.onerror = function(event) { console.error("File could not be read! Code " + event.target.error.code);};reader.readAsDataURL(file); |
以上示例将读取的图片插入页面当中。由于data URI 包含有整个图片的内容,可以直接赋值给一个Image对象的src属性然后显示。你还能将图片直接画到 <canvas> 元素里:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
var reader = new FileReader();reader.onload = function(event) { var dataUri = event.target.result, context = document.getElementById("mycanvas").getContext("2d"), img = new Image(); // wait until the image has been fully processed img.onload = function() { context.drawImage(img, 100, 100); }; img.src = dataUri;};reader.onerror = function(event) { console.error("File could not be read! Code " + event.target.error.code);};reader.readAsDataURL(file); |
以上示例将一个图片资源读入一个 Image 对象,然后将其画入一个canvas中(高宽各100)。
Data URIs 通常都这么用, 且可以用于任何类型的文件。最广泛的用法就是将文件一边读为data URI的同时一边在页面上即时显示。
读取 ArrayBuffers
ArrayBuffer 格式[1] 作为WebGL的一部分首次提出的。ArrayBuffer 表示将任意大小的字节数用一定的字节数来存储。此方式即是通过特定的视图来从 ArrayBuffer 读取数据,比如 Int8Array, 底层为 8 位有符号整型的集合,再如 Float32Array, 底层为32 位浮点数的集合。 这些谐称为类型化数组[2],这样容易迫使你使用一定的字节数来存储而不是无限字节数(即传统的数组)。
你可能将一个 ArrayBuffer 主要用于处理二进制的文件, 以便更细粒度的操作数据。在这里讨论 ArrayBuffer 的方方面面完全超出了的本文的范围,只要知道将文件读成 ArrayBuffer格式是非常简单的即可。你可随时将 ArrayBuffer 通过 XHR 对象的 send() 方法到服务器端 (然后在后端将数据重建),只要你的浏览器完整支持XMLHttpRequest Level 2[3] (各大浏览器的最新版都支持的包括IE10和Opera 12).
下期预告
通过FileReader 从文件中读取数据非常简单。如果你会用 XMLHttpRequest那么很容易学会从文件中读取数据。下期你将会学到更多 FileReader 相关事件和理解常见错误。
参考资料
原文:
http://www.iunbug.com/archives/2012/06/04/220.html
可参考:
http://blog.csdn.net/zk437092645/article/details/8745647
[转]JavaScript文件操作(2)-FileReader的更多相关文章
- Javascript 文件操作(整理版)
Javascript 文件操作 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详细介绍 ...
- File API文件操作之FileReader
近来研究点对点的文件传输,想到一种方案FileReader+WebRtc. 当我看到FileReader的时候,哎呀,不错的东西啊,仔细一看属于File API,或者叫做Web API. File A ...
- File API文件操作之FileReader二
上一篇说了FileAPI中FileReader的readAsText,这里继续上文,说说另外一个API readAsDataURL. 这个接口是将File或者Blob读成base64格式的字符串,然后 ...
- JavaScript文件操作(1)-基础
http://www.iunbug.com/archives/2012/06/04/208.html
- JS读取文件,Javascript之文件操作 (IE)
一.功能实现核心:FileSystemObject 对象 要在javascript中实现文件操作功能,主要就是依靠FileSystemobject对象. 二.FileSystemObject ...
- 廖雪峰js教程笔记14 file文件操作
在HTML表单中,可以上传文件的唯一控件就是<input type="file">. 注意:当一个表单包含<input type="file" ...
- HTML5学习之文件操作(九)
之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很进行跨平台的处理,另外就是让我们的web应用依赖了第三方的插件,而不是很独立 ...
- H5文件操作API
引言 在之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台.或者跨浏览器.跨设备等情况下实现统一的表现,从另外一个 ...
- HTML5文件操作API
HTML5文件操作API 一.文件操作API 在之前我们操作本地文件都是使用flash.silverlight或者第三方的activeX插件等技术,由于使用了这些技术后就很难进行跨平台.或 ...
随机推荐
- VC++MFC对话框程序中给对话添加背景图片
VC对话框怎么显示背景图片呢.在MFC中实现背景图片,不像C#应用程序那么简单.今天就和朋友们说说如何在VC界面中设置背景图片 ^_^ 工具/原料 Visual C++ 2010 方法一:用Pic ...
- Collecting Bugs (概率dp)
Ivan is fond of collecting. Unlike other people who collect post stamps, coins or other material stu ...
- Django 基于Ajax & form 简单实现文件上传
前端实现 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="U ...
- 如何判断移动终端访问还是PC访问?
我们经常需要知道访问网站的设备是移动终端还是PAD还是PC,下面给出判断的java代码供参考.实现的原理就是获取HTTP消息头里User-Agent和x-wap-profile,User-下面是Use ...
- mysql sql语句:行转列问题
存在表score,记录学生的考试成绩,如下图所示: 现要求以 学生姓名,语文,数学,英语 这种格式显示学生成绩,如下图所示 具体步骤如下: 1.首先,使用case when函数输出单个课程的成绩 ca ...
- 最新版本express 4.2.0的快速建站--简单举例
express是Node.js的官方唯一推荐的框架,它扩展了http工具以及一些好用的功能.如此好用的东西,赶紧的安装起来: npm install express -g 新版本的express的命令 ...
- PHP操作MySQL事务处理
PHP操作MySQL事务处理 /*************** 用begin,rollback,commit来实现 ***************/ /*方法二*/ $conn = mysqli_co ...
- 开发rsync启动脚本2
使用函数更加规范的开发rsync启动脚本 #!/bin/bash #chkconfig: #description: create by vincen . /etc/init.d/functions ...
- mysql 事件(Event) 总结
1 事件简介 事件(event)是MySQL在相应的时刻调用的过程式数据库对象.一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”. 事件和触发器类似,都是在 ...
- java深入探究05
通讯录小程序 需求说明: 功能: 添加联系人 修改联系人 删除联系人 查询所有联系人 要求: console控制 数据保存在xml 1.创建联系人类 /** * 联系人实体对象 * @author A ...