File API 读取文件小结

简单地说,File API只规定怎样从硬盘上提取文件,然后交给在网页中运行的JavaScript代码。
与以往文件上传不一样,File API不是为了向服务器提交文件设计的。

关于File API不能做什么也非常值得注意。它不能修改文件,也不能创建新文件。
想保存任何数据,你可以通过Ajax把数据发送到服务器,或者把它保存在本地存储空间中。

取得文件

  • 使用input元素。将其type属性设置为file,这样是最常见的标准上传文本框
  • 隐藏的input元素。为了保证风格一致,可以把input元素隐藏起来,显示一个漂亮的按钮。
    用户点击按钮时,通过JS调用隐藏的input的click事件
  • 拖放。把文件拖放到网页上

读取文本文件readAsText()

使用File API可以直接读取文件文件的内容。创建一个例子

<input name="myAvatar" type="file" onchange="processFiles(this.files)" />

选择一个文件后,会触发这个input元素的onChange事件,因而就会执行processFiles()函数

var output = document.getElementById(‘fileOutput‘);
var processFiles = function(files) {
    // 一次只允许上传一个文件
    var file = files[0];
    var reader = new FileReader();

    reader.onload = function(e) {
        output.textContent = e.target.result;
    }
    reader.readAsText(file);
};

每个文件对象都有三个有用的属性:name,保存文件名。size保存文件的字节大小。 type
保存文件的MIME类型

一次读取多个文件multiple

为input元素添加multiple属性,一次可以读取多个文件

<input name="myAvatar" type="file" multiple onchange="processFiles(this.files)" />

循环处理多文件。注意onLoad事件是异步的

var processFiles = function(files) {
    var fileContents = [];

    for(var i=0, len = files.length; i< len; i++) {
        // 每个文件建立一个文件句柄
        var reader = new FileReader();
        // 由于onload是异步处理函数,使用闭包记录i值。否则i一直等于len
        (function(i) {
            reader.onload = function(e) {
                fileContents.push(e.target.result);
                if(i === len - 1) {
                    output.textContent = fileContents.join(‘\n\n\n‘);
                }
            }
        })(i)
        reader.readAsText(files[i]);
    }
};

读取图片文件readAsDataURL()

FileReader处理文本内容只需要一步。同样,处理图片内容也这么简单。
这归功于readAsDataURL()方法。

下面的例子涉及处理图片和文件拖放。提交的图片文件用于绘制元素的背景。

var dropBox;
document.addEventListener(‘DOMContentLoaded‘, function() {
    dropBox = document.getElementById(‘dropbox‘);
    dropbox.addEventListener(‘dragenter‘, ignoreDrag, false);
    dropbox.addEventListener(‘dragover‘, ignoreDrag, false);
    dropbox.addEventListener(‘drop‘, drop, false);
}, false)
var processFiles = function(files) {
    var file = files[0];
    var reader = new FileReader();
    reader.onload = function(e) {
        dropBox.style.backgroundImage = ‘url(‘ + e.target.result + ‘)‘;
    };

    // 读取图片
    reader.readAsDataURL(file);
};
var ignoreDrag = function(e) {
    e.stopPropagation();
    e.preventDefault();
};
var drop = function(e) {
    ignoreDrag(e);

    var data = e.dataTransfer;
    var files = data.files;
    processFiles(files);
};

下面是html和css

<div id="dropbox">
    <div>Drop your image here</div>
</div>
#dropbox {
    margin: 15px; width: 300px; height: 300px;
    border: 5px dashed gray; border-radius: 8px;
    background: lightyellow; background-size: 100%;
    background-repeat: no-repeat; text-align: center;
}
#dropbox div { margin: 100px 70px; color: orange; font-size: 25px; }

更新2014/07/10

对异步循环使用递归

var processFiles = function(files) {
    var filesLen = files.length
        , reader = null
        , fileContents = []
        , readFile = function(i) {
            if(i === filesLen) {                // 递归的结束条件
                output.textContent = fileContents.join(‘\n\n\n‘);
                return;
            }
            reader = new FileReader();
            reader.onload = function(e) {
                fileContents.push(e.target.result);
                readFile(i+1);                  // 保证输出顺序
            };
            reader.readAsText(files[i]);
        };

    if(!filesLen) return;
    readFile(0);                                // 开始递归
};

参考:the missing manual

File API 读取文件小结,布布扣,bubuko.com

时间: 2024-10-13 10:55:54

File API 读取文件小结的相关文章

HTML5 file api读取文件的MD5码工具

1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆兼容: 3.缺陷:当上传大文件时,需要较长的时间才能扫描出MD5码: 4.关于引用:其中引用了js文件(spark-md5.js) <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo

HTML5的File API读取文件信息

html结构: <div id="fileImage"></div> <input type="file" value="upload" id="fileInput"> <p id="fileInfo"></p> css样式: #fileImage{width: 300px;height: 300px; margin: 20px auto;back

javascript 使用Html5 File Api进行文件读取

javascript 使用Html File Api进行文件读取,注意"读取"是只读不写,不可以主动获取浏览器所在主机的文件列表. Html5 中 FileApi主要有 FileUpload, File,FileList,FileError,Blob,FileReader,DataTransfer. 这里主要测试File.因此有必要给一个 test target <form action="javascript:void(0)" method="po

python读取文件小结

python读取文件小结 你想通过python从文件中读取文本或数据. 一.最方便的方法是一次性读取文件中的所有内容并放置到一个大字符串中: all_the_text = open('thefile.txt').read( )     # 文本文件中的所有文本 all_the_data = open('abinfile','rb').read( )    # 二进制文件中的所有数据 为了安全起见,最好还是给打开的文件对象指定一个名字,这样在完成操作之后可以迅速关闭文件,防止一些无用的文件对象占用

HTML 5 File API:文件拖放上传功能

即将到来的 html5 规范有几个特性,以致使 HTML 远远超出其本身作为一种标记语言的能力,并为 Web 开发者提供了一些强大的脚本工具.负责监督 HTML5 发展进程的 W3C 组织,刚刚出版了一份强有力的规格草案 – HTML5 File API 接口功能. 该 API 的设计初衷,是改善基于浏览器的 Web 应用程序处理文件上传的方式,使文件直接拖放上传成为可能.草案定义了新的输入选项 <input type=”file”> 来处理文件上传. 更为惊喜的是,该 API 为开发者提供了

resumable.js —— 基于 HTML 5 File API 的文件上传组件 支持续传后台c#实现

在git上提供了java.nodejs.c#后台服务方式:在这里我要用c#作为后台服务:地址请见:https://github.com/23/resumable.js 我现在visual studio的环境是2013,mvc4,framwork4.0:我们来看git上给出的c#示例: samples/DotNET/ 在文件中包含两个文件Controllers Models,在两个文件里各有一个文件: 我把他部署到自己项目里边,却没有达到自己预定的效果,我是这样更改的: 一.我先把我的类库项目调成

使用File API 之FileReader 实现文件上传

对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情,通常我们能做的仅仅是使用<input type="file">标签来上传文件.实现过程是:选取文件的时候value 属性保存了用户指定的文件的名称,表单被提交的时候,浏览器会向服务器发送选中的文件的内容而不仅仅是发送文件名.再获取服务器返回的地址,然后做预览. 但是如果有一天我们要上传一个图片,传了图片后预览想换另一张图片,就又得先上传到服务器再预览.在网络比较慢的情况下,这样真的很折腾. 所以我们某些时候需要先预览

php读取文件内容的4钟常用方法函数

这四种方法根据不同情况使用,可以实现对文件的任何操作,下面有详细介绍. 1.把整个文件读入一个字符串中 file_get_contents(); 2.把整个文件读入一个数组中,一行就是一个数组元素 file(); 3.读取文件若成功,则返回从文件中读入的字节数 readfile(); 4.下面这几个函数可对文件进行细致地读取,还可将文件实现类似数据库的操作. fopen(); fread(); //读取指定长度 fgetc(); //读取单个字符 fgets(); //读取一行字符 feof()

通过 File API 使用 JavaScript 读取文件

原文地址:http://www.html5rocks.com/zh/tutorials/file/dndfiles/ 简介 HTML5 终于为我们提供了一种通过 File API 规范与本地文件交互的标准方式.为了举例说明其功能,可使用 File API 在向服务器发送图片的过程中创建图片的缩略图预览,或者允许应用程序在用户离线时保存文件引用.另外,您可以使用客户端逻辑来验证上传内容的 mimetype 与其文件扩展名是否匹配,或者限制上传内容的大小. 该规范通过“本地”文件系统提供了多种文件访