标签:
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接口
Blob接口
File接口
FileReader方法
FileReader事件
FileReader属性
对FileAPI实践的三点注意
1. 由于规范尚未截稿,#File.urn尚存较大变数,webkit并未实现此特性
2. #Blob.slice在webkit内核中加入了前缀,即#Blob.webkitSlice,且第二个参数不是“length”,而是“end”,话句话说,上面的示例二应改为file.webkitSlice(3, size)才能生效
3. 规范中还明确规定了各种出错处理和异常处理,这些内容是同样重要的:不论对于一套完备的规范,还是对于一个健壮的程序而言 。
标签:
原文地址:http://www.cnblogs.com/wayofeng/p/5865382.html