JavaScript文件处理:文件读取

在我的前一篇blog中,我介绍了在JavaScript中如何使用文件,具体重点放在如何获得File对象。只有当用户通过上传或者拖拽的方式上传了文件,这些对象才拥有文件的元数据。一旦你有了这些文件,下一步就是从这些文件中读取数据。

FileReader 类型

FileReader类型有一个单一的工作,就是从一个文件中读取数据并存储在一个JavaScript变量中。它的API有意设计得与XMLHttpRequest相同,因为它们都是从一个外部资源(浏览器之外)加载数据。读操作是异步的,这样不会使浏览器堵塞。

FileReader可以创建多种格式来表示文件的数据,而当读取文件时返回的格式是必须的。读取操作是通过调用下面任一方法来完成的:

  • readAsText() – 使用纯文本的形式返回文件内容
  • readAsBinaryString() – 使用加密二进制数据字符串的形式来返回文件内容(该方法已废弃,请使用readAsArrayBuffer()代替)
  • readAsArrayBuffer() – 使用ArrayBuffer的形式来返回文件内容(对二进制数据比如图像文件有用)
  • readAsDataURL() – 使用数据URL的形式返回文件内容

像XHR对象的send方法会发起一个Http请求一样,上面的每个方法都会启动一个文件读取。就这一点来说,在开始读取之前,你必须监听load事件,event.target.result总是返回读取的结果。例如:

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);

在这个例子中,我们简单地读取文件内容,并将内容以纯文本的形式输出到console。当文件被成功读取时会调用onload操作,而因为某些原因无法读取时会调用onerror操作。在事件处理器中可以通过event.target来获得FileReader实例,而且它推荐这样使用,而不是直接使用reader变量。result属性包含读取成功时的文件内容和读取失败时的错误信息。

读取数据URI

你可以用差不多的方法来将文件读取为一个数据URI,数据的URI(有时也叫数据URL)是个有趣的选项,比如你想要显示从磁盘上读取的图像文件,你可以用下面的代码这样做:

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);

这段代码简单地在页面上插入一个从磁盘上读取来的图像文件。因为这个数据URI包含了图像的所有数据,所以它可以被直接传给图像的src属性,并显示在页面上。你可以交替地加载图像和将其绘制到一个<canvas>上:

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对象,并将其绘制到一个画布上(宽度和长度都指定为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都支持)。

时间: 2024-08-08 16:20:03

JavaScript文件处理:文件读取的相关文章

Javascript写入txt和读取txt文件的方法

文章主要介绍了Javascript写入txt和读取txt文件的方法,需要的朋友可以参考下1. 写入 FileSystemObject可以将文件翻译成文件流. 第一步: 例: 复制代码 代码如下: Var fso=new ActiveXObject(Scripting.FileSystemObject); 创建一个可以将文件翻译成文件流的对象. 第二步:用于创建一个textStream 对象 括号里边有三个属性 1. 文件的绝对路径 2. 文件的常数 只读=1,只写=2 ,追加=8 等权限.(Fo

[003]从文件夹中读取所有图片或者文件

从javascript的角度上看,因为语言的关系,是不能从文件夹读取文件的. 但是,我们可以同activeX的方法来获取后,传递给javascript使用. 详细代码如下: 1 var fileNameArray = []; 2 function searchFiles1(dir){ 3 if (dir.substr(dir.length-1, 1) != "\\" && dir.substr(dir.length-1, 1) != "/") 4 d

使用JavaScript 操作本地文件

显示用户选择文件[图片]实现code如下 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>JavaScript显示用户选取的图片</title> 6 </head> 7 <body> 8 <div> 9 <input type="file" name="

练习:读取解析CSV文件,将读取结果输出的控制台上,并封装到4个Teacher对象中.

/** *    读取解析CSV文件,将读取结果输出的控制台上,并封装到4个Teacher对象中. *    1, 土鳖, 13101015338, 北京海淀区 2, 咪咪, 13201015338, 北京朝阳区 3, 小仓, 13601015818, 北京宣武区 4, 饭岛爱, 13201025818, 北京朝阳区 /** * 读取解析CSV文件,将读取结果输出的控制台上,并封装到4个Teacher对象中. * 1, 土鳖, 13101015338, 北京海淀区 2, 咪咪, 13201015

【Android】14.1 内部文件存储和读取

分类:C#.Android.VS2015: 创建日期:2016-02-27 一.简介 内部存储是指将应用程序建立的私有文件保存在内部存储器(移动经销商卖的那种容量较小的手机卡)中. 应用程序可通过OpenFileInput方法和OpenFileOutput方法读取内部存储设备上的这些文件. 1.OpenFileOutput方法 该方法打开应用程序私有文件,为写入设备做准备.默认情况下,写入的文件会覆盖同名的原文件.如果要打开的文件不存在,则创建一个新文件. 该方法的语法格式如下: public

File:迭代读取文件夹下的文件或者文件夹

在项目中,有时需要获取文件夹下的所有文件或者文件夹,以及对应的最后修改时间.下面的代码实现了迭代读取指定路径下的文件,修改时间可以自己加lastModified()方法. public class Folder { public static void main(String[] args) { String path="F:/111"; readFile(path); } /**迭代读取文件夹下所有子文件或者文件夹 * @param path 文件夹路径 */ public stat

Windows Store App JavaScript 开发:选取文件和文件夹

前面提到过,文件打开选取器由FileOpenPicker类表示,用于选取或打开文件,而文件夹选取器由FolderPicker类表示,用来选取文件夹.在FileOpenPicker类中,pickSingleFileAsync函数用于选取单个文件,pickMultipleFilesAsync函数用于选取多个文件:而FolderPicker类中只有一个pickSingleFolderAsync函数,用来选取单个文件夹.下面以一个应用程序为例来演示如何选取文件或文件夹. 新建一个JavaScript的W

Windows Store App JavaScript 开发:获取文件和文件夹列表

在应用程序中有时可能需要获取用户库中的内容,以便执行相关的操作.如果要获取某个用户库中的内容,需要先获取到这个用户库,获得用户库可以通过Windows.Storage命名空间中的KnownFolders类的相应属性来实现,可用属性包括documentsLibrary(文档库).musicLibrary(音乐库)和videosLibrary(视频库)等.获取到用户库之后,就可以使用KnownFolders类中的getItemsAsync.getFilesAsync或getFoldersAsync函

用Javascript清空(重置)文件类型的INPUT元素的值

之前在StackOverflow回答了这个问题,现在整理到Blog里. 因为安全限制,脚本是不能随意设置其value值的,所以并不能像其它表单输入域那样用属性来设置使其重置. 重置一个文件域的值,归纳起来主要有 3 种方法. 本文分析这三种方法的浏览器兼容性以及优缺点,并给出一个比较完美的综合方案的代码和Demo. 重置文件域的三种方法: 设置value属性为空. 对于IE11以上和其它较新的非IE的现代浏览器Chrome/Firefox/Opera...有效. 克隆或创建一个新的文件输入元素进

javascript如何将文件保存到本地

javascript如何将文件保存到本地: 下面是保存一个图片为示例,代码来源于网络,希望能够给大家带来一定的帮助,代码如下: <script type="text/javascript"> function saveFile(imgUrl) { var oPop=window.open(imgUrl,"","width=1, height=1, top=5000, left=5000"); for(;oPop.document.re