HTML5 FileAPI(转)

在HTML5中,提供了一个关于文件操作的API,通过这个API,对于从web页面上访问本地文件系统的相关处理变得十分简单。到目前为止只有部分浏览器对它提供支持。

1.FileList对象和File对象

  FileList对象表示用户选择的文件列表,在HTML4中file控件内只允许放置一个文件,但在HTML5中通过添加multiple属性,file控件内允许放置多个文件。控件内的每一个用户选择的文件都是一个file对象,而FileList就是这些file对象的列表,代表用户选择的所有文件。file对象有两个属性,一个是name,代表文件名不包含文件的路径;一个是lastModifiedDate,表示文件最后被修改的日期。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset=‘UTF-8‘/>
 5         <title>FileList and File </title>
 6         <script type="text/javascript" language="JavaScript">
 7 function showFiles(){
 8 var file,
 9                 len = document.getElementById(‘file‘).files.length;//返回FileList文件列表对象
10 for (var i=0; i < len; i++) {
11                   file = document.getElementById(‘file‘).files[i];
12                   alert(file.name);
13                 };
14
15             }
16 </script>
17     </head>
18     <body>
19         <input type="file" id=‘file‘ multiple="multiple" width="80px"/>
20         <input type="button" id="bt1" value="click" onclick="showFiles();"/>
21     </body>
22 </html>

2.Blob对象

  提到Blob对象,估计有人会想起OracleDB中Blob字段,意义上有些类似。HTML5中Blob表示二进制原始数据,它提供一个slice()方法,可以通过这个方法访问到字节内部的原始数据块。事实上,上面提到的file对象继承了Blob对象。

  Blob对象的两个属性,size:表示一个对象的字节长度。type:表示一个对象的MIME类型,如若是未知类型返回空字符串。

    function showFileInfo(){
2                 var file = document.getElementById(‘file‘).files[0];
3                 var size = document.getElementById(‘fileType‘);
4                 var type = document.getElementById(‘fileSize‘);
5                 size.innerHTML = file.size;
6                 type.innerHTML = file.type;
7             }  

  对于图像类型的文件,Blob对象的type属性都是以image/开头,可以利用这个特性对用户选择的文件类型做判断。

  

           function showFileInfo(){
 2                 var file = document.getElementById(‘file‘).files[0];
 3                 if(checkImage(file)){
 4                 var size = document.getElementById(‘fileType‘);
 5                 var type = document.getElementById(‘fileSize‘);
 6                 size.innerHTML = file.size;
 7                 type.innerHTML = file.type;
 8                 }
 9                 else{
10                     return ;
11                 }
12             }
13             function checkImage(file){
14                 if(!/img\/\w+/.test(file.type)){
15                     alert(file.name + "不是图片");
16                     return false;
17                 }
18                 return true;
19             } 

  另外,file控件在HTML5标准中添加了accept属性,用来限制接受的文件类型,但目前各浏览器对齐支持都仅限于在打开文件选择窗口时默认的选择图像文件而已,如果选择其他类型,控件也能接受。

3.FileReader接口

  3.1接口方法

  FileReader接口提供了四个方法,其中3个用来读取文件,1个用来中断文件的读取。

方法名   参数 描述
readAsBinaryString() file 将文件读取为二进制字符串,通常将它传到后端,后端可以通过这段字符串存储文件
readAsDataURL() file 将文件读取为一段data url字符串,事实上是将小文件以一种特格式的URL地址直接读取到页面。小文件通常指图片与html等格式文件
readAsText() file [encoding] 将文件以文本的方式读取,其中第二个参数为文本的编码。
abort() (none) 中断读取操作。

  需要注意的是,无论读取成功还是失败,方法都不会返回读取结果,结果返回在result属性中。

  3.2接口事件

  FileReader接口提供了一套完整的事件模型,用于捕获读取文件时的状态。

事件 描述
onabort 数据读取中断时发生
onerror 数据读取出错时发生
onloadstart 数据读取开始时发生
onload 数据读取成功完成时发生
onloadend 数据读取完成时发生无论读取成功还是失败
onprogess 数据读取中

  3.3实例

  

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="utf-8" />
 5         <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
 6         <title>FileReader</title>
 7         <meta name="description" content="" />
 8         <meta name="viewport" content="width=device-width; initial-scale=1.0" />
 9         <script type="text/javascript" language="JavaScript">
10 var file ,
11                 result;
12 function  myLoad() {
13                  file = document.getElementById(‘file‘).files[0];
14                  result = document.getElementById(‘result‘);
15             }
16 if(typeof FileReader == ‘undefined‘){
17                 result.innerHTML = "你的浏览器不支持 FileReader";
18                 file.setAttribute("disabled","disabled");
19             }
20 function readAsDataURL(){
21 if(!/image\/\w+/.test(file.type)){
22                     alert(file.name + ‘不是一个图片类型的文件‘);
23                 }else{
24 var reader = new FileReader();
25                     reader.readAsDataURL(file);
26                     reader.onload = function(e){
27
28                         result.innerHTML = "<img src=" + reader.result +"/>";
29                     };
30                 }
31             }
32 function readAsBinaryString(){
33 var reader = new FileReader();
34                 reader.readAsBinaryString(file);
35                 reader.onload = function(e){
36                     result.innerHTML = reader.result;
37                 };
38             }
39 function readAsText(){
40 var reader = new FileReader();
41                 reader.readAsText(file);
42                 reader.onload=function(e){
43                     result.innerHTML = reader.result;
44                 };
45             }
46 </script>
47
48     </head>
49     <body >
50         <p>
51             <input type="file" id=‘file‘/>
52             <input type=‘button‘ id="bt_DataURL" value="读取图片" onclick="readAsDataURL();"/>
53             <input type="button" id="bt_BinaryString" value="读取二进制字符串" onclick="readAsBinaryString();"/>
54             <input type="button" id="bt_textString" value="读取文本信息" onclick="readAsText();"/>
55         </p>
56         <div id="result">
57
58         </div>
59     </body>
60 </html>

时间: 2024-10-12 21:08:36

HTML5 FileAPI(转)的相关文章

Web端本地存储

1.需求背景:当用户在页面上添加一行一行的数据时,突然发现网络断掉了,页面上编辑的数据没法保存进数据库,所以需要一个本地端的临时保存功能,以便在网络通畅后重新加载出来! 2.解决方案: 结合网上搜刮,考虑到了这几种方式:1)采用cookie; 2)看能不能采用浏览器的页面缓存来模拟 3)使用html5 1)cookie使用(做测试是直接用浏览器打开没有效果,需要放到站点下) 所有浏览器都支持,所以不需要去考虑兼容性的问题; 浏览器对于同一domain最多支持20个左右cookie,每个cooki

h5缓存之数据库

/*======================================================= 函数功能:保存日志到本地数据库 =======================================================*/ function saveLog(str) { var db = window.openDatabase("web", "1.1", "log", 1024 * 1024); // 创建

[实战]MVC5+EF6+MySql企业网盘实战(5)——ajax方式注册

写在前面 今天贴合到实际的客户需求仔细的想了下,其实在userInfo这个类里面很多字段都不是必须的.有很多的事业单位根本就不能上网,填写的邮箱也是exchange的,个人的详细信息都在ad里面可以取到,再这里重新注册一次确实没有必要.所以对注册的字段重新筛选了一下.对于目前大多数网站来说,要么就是采用第三方的登录方式,要么就是非常简单的注册方式,对我本人来说,如果非必要,我喜欢第三方的登录方式.当然,简单的注册信息,可以更方便用户,也可以在用户注册后,为用户提供积分系统等让用户完善个人资料来增

判断浏览器是否支持FileReader

1.js代码: //判断浏览器是否支持FileReader if (typeof FileReader == "undefined") { document.write("您的浏览器不支持FileReader"); } else { document.write("您的浏览器支持FileReader"); } /** * 测试结果说明:Google,FF,IE都支持FileReader * 但是IE9及以下浏览器不支持FileReader */

极客学院Web前端开发技术实战视频教程 初级入门+高级实战++专家课程+面试指导

===============课程目录=============== ├<初级中级>│  ├<1. HTML5开发前准备>│  │  ├1.HTML5开发前准备.mp4│  │  └2.开发前的准备-快捷键.mp4│  ├<10. React.js>│  │  ├React.js简介.txt│  │  ├<1.React 概述>│  │  │  ├React 开发环境搭建.mp4│  │  │  ├编写第一个 React 程序.mp4│  │  │  └什么

HTML5的FileAPI实现文件的读取及超大文件的上传

HTML5的FileAPI实现文件的读取及超大文件的上传 2015-02-04 一.FileAPI实现本地文件的信息读取 <html> ????<head> ????<title>FormData</title>? ????<script?type="text/javascript"> //选择文件时调用 function?selectfile(){ ????//控制台显示??得到文件列表对象??文件数组 ????//cons

HTML5 学习笔记(一)——HTML5概要与新增标签

一.HTML5概要 1.1.为什么需要HTML5 HTML4陈旧不能满足日益发展的互联网需要,特别是移动互联网.为了增强浏览器功能Flash被广泛使用,但安全与稳定堪忧,不适合在移动端使用(耗电.触摸.不开放). HTML5增强了浏览器的原生功能,符合HTML5规范的浏览器功能将更加强大,减少了Web应用对插件的依赖,让用户体验更好,让开发更加方便,另外W3C从推出HTML4.0到5.0之间共经历了17年,HTML的变化很小,这并不符合一个好产品的演进规则. 1.2.什么是HTML5 HTML5

HTML5 学习总结(一)——HTML5概要与新增标签

目录 一.HTML5概要 1.1.为什么需要HTML5 1.2.什么是HTML5 1.3.HTML5现状及浏览器支持 1.4.HTML5特性 1.5.HTML5优点与缺点 1.5.1.优点 1.5.2.缺点 1.6.HTML5效果展示 1.7.HTML5学习与开发工具 1.7.1.基础要求 1.7.2.开发工具 1.8.HTML5语法规则与文档声明 1.8.1.语法规则 1.8.2.文档声明 1.8.2.文档声明 二.废弃的标签 三.新增的标签 3.1.新增的结构标签 3.2.新增加其它元素 3

[转载] HTML5 文件操作API——HTML5系列

简介 我常常想,如果网络应用能够读取和写入文件与目录,将会非常方便.从离线转移到在线后,应用变得更加复杂,而文件系统方面的API的缺乏也一直阻碍着网络前进.存储二进制数据或与其进行交互不应局限于桌面.令人欣慰的是,由于FileSystemAPI的出现,这一现状终于得到了改变.有了FileSystemAPI,网络应用就可以创建.读取.导航用户本地文件系统中的沙盒部分以及向其中写入数据. API 被分为以下不同的主题: 读取和处理文件:File/Blob.FileList.FileReader 创建