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;background-repeat:  no-repeat ;background-position:  left top;background-size: contain; }
#fileInfo{border: 1px solid #eee;}

js代码:

var fileInput = document.getElementById("fileInput"),
fileImage = document.getElementById("fileImage"),
fileInfo = document.getElementById("fileInfo"); //监听change事件
fileInput.addEventListener('change',function(){
//清空预览区背景图片
fileImage.style.backgroundImage = '';
//检查文件是否选择
if(!fileInput.value){
fileInfo.innerHTML = "没有选择任何文件";
return;
} //获取file的引用
var file = fileInput.files[0]; //获取file信息
fileInfo.innerHTML = '文件'+file.name+'<br>'+
'大小'+file.size+'<br>'+
'修改'+file.lastModifiedDate+'<br>';
if(file.type !== 'image/jpeg' && file.type !== 'image/png' && file.type !== 'image/gif'){
alert('不是有效的图片');
return;
} //读取文件
var reader = new FileReader();
reader.onload = function(e){
var data = e.target.result;
fileImage.style.backgroundImage = 'url('+data+')';
}
// 以DataURL的形式读取文件:
reader.readAsDataURL(file);
});

选择文件之后可以看到文件的名称、大小、修改的时间,也可以预览图片。以DataURL的形式读取到的文件是一个字符串,类似于data:image/jpeg;base64,/9j/4AAQSk...(base64编码)...,常用于设置图像。如果需要服务器端处理,把字符串base64,后面的字符发送给服务器并用Base64解码就可以得到原始文件的二进制内容。 以上是使用file API操作文件的例子,摘自廖老师的js教程。

file API借口总览

◆ FileList接口: 可以用来代表一组文件的JS对象,比如用户通过input[type="file"]元素选中的本地文件列表

◆ Blob接口: 用来代表一段二进制数据,并且允许我们通过JS对其数据以字节为单位进行“切割”

◆ File接口: 用来代步一个文件,是从Blob接口继承而来的,并在此基础上增加了诸如文件名、MIME类型之类的特性

◆ FileReader接口: 提供读取文件的方法和事件

FileList接口

  1. #FileList[index] // 得到第index个文件

Blob接口

  1. #Blob.size // 只读特性,数据的字节数
  2. #Blob.slice(start, length) // 将当前文件切割并将结果返回

File接口

  1. #File.size // 继承自Blob,意义同上
  2. #File.slice(start, length) // 继承自Blob,意义同上
  3. #File.name // 只读属性,文件名
  4. #File.type // 只读属性,文件的MIME类型
  5. #File.urn // 只读属性,代表该文件的URN,几乎用不到,暂且无视

FileReader方法

  1. #FileReader.readAsBinaryString(blob/file) // 以二进制格式读取文件内容
  2. #FileReader.readAsText(file, [encoding]) // 以文本(及字符串)格式读取文件内容,并且可以强制选择文件编码
  3. #FileReader.readAsDataURL(file) // 以DataURL格式读取文件内容
  4. #FileReader.abort() // 终止读取操作

FileReader事件

  1. #FileReader.onloadstart // 读取操作开始时触发
  2. #FileReader.onload // 读取操作成功时触发
  3. #FileReader.onloadend // 读取操作完成时触发(不论成功还是失败)
  4. #FileReader.onprogress // 读取操作过程中触发
  5. #FileReader.onabort // 读取操作被中断时触发
  6. #FileReader.onerror // 读取操作失败时触发

FileReader属性

  1. #FileReader.result // 读取的结果(二进制、文本或DataURL格式)
  2. #FileReader.readyState // 读取操作的状态(EMPTY、LOADING、DONE)
  3. 对FileAPI实践的三点注意

    1. 由于规范尚未截稿,#File.urn尚存较大变数,webkit并未实现此特性

    2. #Blob.slice在webkit内核中加入了前缀,即#Blob.webkitSlice,且第二个参数不是“length”,而是“end”,话句话说,上面的示例二应改为file.webkitSlice(3, size)才能生效

    3. 规范中还明确规定了各种出错处理和异常处理,这些内容是同样重要的:不论对于一套完备的规范,还是对于一个健壮的程序而言 。

HTML5的File API读取文件信息的更多相关文章

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

    1.工具的用途:用HTML5 file api读取文件的MD5码.MD5码在文件的唯一性识别上有很重要的应用,业内常用MD5进行文件识别.文件秒传.文件安全性检查等: 2.适用性:IE.Chrome皆 ...

  2. File API 读取文件小结

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

  3. 使用 JavaScript File API 实现文件上传

    概述 以往对于基于浏览器的应用而言,访问本地文件都是一件头疼的事情.虽然伴随着 Web 2.0 应用技术的不断发展,JavaScript 正在扮演越来越重要的角色,但是出于安全性的考虑,JavaScr ...

  4. Resumable.js – 基于 HTML5 File API 的文件上传

    Resumable.js 是一个 JavaScript 库,通过 HTML5 文件 API 提供,稳定和可恢复的批量上传功能.在上传大文件的时候通过每个文件分割成小块,每块在上传失败的时候,上传会不断 ...

  5. Java8 新API读取文件内容

    import java.io.IOException;import java.nio.charset.Charset;import java.nio.file.Files;import java.ni ...

  6. linux 读取文件信息并且输出

    版权为个人所有,欢迎转载如转载请说明出处.(东北大亨) http://www.cnblogs.com/northeastTycoon/p/5513231.html 以下为读取文件信息做输出操作. 1. ...

  7. File API 读取上传的文件

    1, 在html 文档中,<input type="file"> 我们可以选择文件进行上传,但这时只能上传一个文件.如果加上multiple 属性,可以上传多个文件,上 ...

  8. 【小月博客】用HTML5的File API做上传图片预览功能

    前段时间做了一个项目,涉及到上传本地图片以及预览的功能,正好之前了解过 html5(点击查看更多关于web前端的有关资源) 可以上传本地图片,然后再网上看了一些demo结合自己的需求,终于搞定了.(P ...

  9. html5 文件系统File API

    前言: 在做浏览器上传图片的时候,一般采用form表单上传,这种上传无法预览图片,无法查看图片大小,无法知道图片的类型等等!那么在html5 File API提供了这些表单无法实现的功能,而且还支持拖 ...

随机推荐

  1. 连接有密码的mongodb

    mongoose: db.openSet("mongodb://admin:pass@192.168.1.100:27017/mydb");

  2. 基于AngularJS的个推前端云组件探秘

    基于AngularJS的个推前端云组件探秘 AngularJS是google设计和开发的一套前端开发框架,帮助开发人员简化前端开发的负担.AngularJS将帮助标准化的开发web应用结构并且提供了针 ...

  3. PAT 1045. 快速排序(25)

    著名的快速排序算法里有一个经典的划分过程:我们通常采用某种方法取一个元素作为主元,通过交换,把比主元小的元素放到它的左边,比主元大的元素放到它的右边. 给定划分后的N个互不相同的正整数的排列,请问有多 ...

  4. [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二

    Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...

  5. navicat注册码

    1. navicat for mysql 9 注册码   :::   NAVL-EHNC-7N7P-W6GM  2. navicat for mysql 9.17中文版 注册码 :: NAVM-5ZC ...

  6. 安卓 Handler

    1. 看视频有关Handler操作,没有用过,里面的老师也没有讲(新手太难了) 查了一下资料. 一.Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释:当应用程序 ...

  7. 【UOJ #35】后缀排序 后缀数组模板

    http://uoj.ac/problem/35 以前做后缀数组的题直接粘模板...现在重新写一下模板 注意用来基数排序的数组一定要开到N. #include<cstdio> #inclu ...

  8. Tween公式 以及四个参数

    Tween的主页在这里:http://createjs.com/tweenjs , 这里边还有挺多开源项目的: Tween公式 4个参数 t:current time(当前时间) b:beginnin ...

  9. 【20161203-20161208】清华集训2016滚粗记&&酱油记&&游记

    先挖坑(这个blog怎么变成游记专用了--) 已更完 #include <cstdio> using namespace std; int main(){ puts("转载请注明 ...

  10. jQuery进阶

    复习: jq无论如何都是一个集合 jq是一个包装集 var arr=$("div").get( )会将所有的DOM对象转换成真正的数组, get( )里边没传参数 兄弟元素: 只要 ...