HTML 5 使用 FileReader、FormData实现文件上传
2016-12-29 20:13
507 查看
一、FileReader
1.1 实例化
1.2 事件类型
每次成功完成读取操作完成时触发loading事件
读取Blob 内容时触发进度 progress 事件
1.3 方法
开始读取指定的Blob内容,完成后,result 属性包含一个用URL表示的文件数据。
开始读取指定的Blob内容,完成后,result 属性包含一个用
HTML
开始读取指定的Blob内容,完成后,result 将文件的内容作为一个文本字符串。
二、在Web 应用中使用files对象
2.1 访问所选文件
files 是一个对象,包含着所选文件列表的信息和一个 length 属性
2.2 通过change 事件访问所选文件
2.3 获取所选文件的基本信息
访问files对象的自带的
可以通过数组列表,检索出被选择的单个文件:
每个 file 对象拥有三个属性,包含着文件的name,size,type
name:文件名,只读,不包含文件路径;
size:文件字节数,64-bit 整型;例如
type:文件的MIME类型,若不确定则为“”(空)。
2.4 使用click 方法隐藏 input 元素
给隐藏的 input 增加事件
三、实例
3.1 显示用户选中图片的缩略图
每个缩略图都添加了一个 obj 的类名,方便后期查找。还向每个图像指定了一个指向文件的file属性,以供稍后实际上传,然后用
紧接着,我们实例化了一个
FileReader对象允许Web应用程序异步读取存储在用户计算机中的文件(或缓冲区的原始数据),使用File或Blob对象指定要读取的文件或数据。
1.1 实例化
var reader = new FileReader()
1.2 事件类型
FileReader.onload
每次成功完成读取操作完成时触发loading事件
FileReader.onprogress
读取Blob 内容时触发进度 progress 事件
1.3 方法
FileReader.readAsDataURL()
开始读取指定的Blob内容,完成后,result 属性包含一个用URL表示的文件数据。
FileReader.readAsArrayBuffer()
开始读取指定的Blob内容,完成后,result 属性包含一个用
ArrayBuffer表示的文件数据。
HTML
<input type="file" onchange="previewFile()"><br> <img src="" height="200" alt="Image preview..." JavaScript function previewFile() { var preview = document.querySelector('img'); var file = document.querySelector('input[type=file]').files[0]; var reader = new FileReader(); reader.addEventListener("load", function () { preview.src = reader.result; }, false); if (file) { reader.readAsDataURL(file); } }
FileReader.readAsText()
开始读取指定的Blob内容,完成后,result 将文件的内容作为一个文本字符串。
二、在Web 应用中使用files对象
2.1 访问所选文件
<input multiple id="upload_input" type="file" accept="image/*" />
使用原生DOM选择器获取元素
var files = document.getElementById('upload_input').files;
files 是一个对象,包含着所选文件列表的信息和一个 length 属性
> console.log(files); < FileList {0: File, 1: File, 2: File, length: 3} <FileList 0:File lastModified:1481789988885 lastModifiedDate:Thu Dec 15 2016 16:19:48 GMT+0800 (中国标准时间) name:"my_order.png" size:93453 type:"image/png" webkitRelativePath:"" 1:File 2:File length:3
2.2 通过change 事件访问所选文件
var inputElement = document.getElementById("input"); inputElement.addEventListener("change", handleFiles, false); function handleFiles() { var fileList = this.files; /* now you can work with the file list */ }
2.3 获取所选文件的基本信息
访问files对象的自带的
length属性,得到被选择文件的个数:
var numFiles = files.length;
可以通过数组列表,检索出被选择的单个文件:
for (var i = 0, numFiles = files.length; i < numFiles; i++) { var file = files[i]; .. }
每个 file 对象拥有三个属性,包含着文件的name,size,type
name:文件名,只读,不包含文件路径;
size:文件字节数,64-bit 整型;例如
92kb的文件,它的size = 92 * 1024 b;
type:文件的MIME类型,若不确定则为“”(空)。
2.4 使用click 方法隐藏 input 元素
<input type="file" id="fileElem" multiple accept="image/*" style="display:none" onchange="handleFiles(this.files)"> <a href="#" id="fileSelect">Select some files</a>
给隐藏的 input 增加事件
var fileSelect = document.getElementById('fileSelect'), fileEle = document.getElementById('fileElem'); fileSelect.addEventListener('click', function(e) { if(fileEle) { fileEle.click(); } }, false)
三、实例
3.1 显示用户选中图片的缩略图
var showThumbnails = function (files) { for(var i = 0; i < files.length; i++) { var file = files[i]; var imageType = /^image\//; if(!imageType.test(file.type)) { continue; } var img = document.createElement('img'); img.classList.add('obj'); img.file = file; preview.appendChild(img); // 假设preview是缩略图的展示位置 var reader = new FileReader(); reader.readAsDataURL(file); reader.onload = (function (aImg) { return function (e) { aImg.src = e.target.result; // e.target 指向 reader } })(img) } }
每个缩略图都添加了一个 obj 的类名,方便后期查找。还向每个图像指定了一个指向文件的file属性,以供稍后实际上传,然后用
Node.appendChild()将新的缩略图添加到预览区域。
紧接着,我们实例化了一个
FileReader来处理异步加载图像并将其附加到
img元素上。调用
readAsDataURL()在后台启动读取操作,图像加载完毕,它们将被转换为传递给
onload回调的数据:URL。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> <title></title> </head> <body> <div class="logo"> <img src="111.png" /> </div> <div class="upload"> <p>上传图片</p> <form> <input multiple id="upload_input" type="file" /> </form> </div> </body> <script> window.onload = function () { var Upload = { change: function () { var oform = document.querySelector('form'), oFiles = document.getElementById('upload_input').files; console.log(oFiles) for(var key in oFiles) { if(oFiles.hasOwnProperty(key)) { console.log('file_name:'+oFiles[key].name); console.log('file_size:'+oFiles[key].size); console.log('file_type:'+oFiles[key].type); } } } }; document.getElementById('upload_input').addEventListener('change',Upload.change); } </script> </html>
相关文章推荐
- HTML使用FileReader对象的readAsDataURL()方法实现图片的上传预览效果
- 使用File API 之FileReader 实现文件上传
- 使用FileReference+HttpHandler实现文件上传/下载(Flex与.NET互操作)
- 使用apache commons-fileupload.jar 实现文件上传
- Html中file实现多文件上传
- 使用apache commons-fileupload.jar 实现文件上传
- 使用html input(file)控件上传文件
- asp.net文件上传用到html的file控件,在使用母版页Master,更改form的Enctype=multipart/form-data的方法
- Html中file实现多文件上传
- asp.net html控件的File控件实现多文件上传实例分享
- WebWork之--使用fileUpload interceptor实现文件上传[基本配置+注意事项]
- ASP.NET同时上传多个文件,和不使用HTMLFileInput上传的方法(resource about file upload)
- flex使用filereference+httphandler实现文件上传/下载(转)
- 使用客户端HTML控件File多文件上传基本原理
- 使用ajaxFileUpload.js插件实现ajax无刷新上传文件
- Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载
- 用jsp<html:file>实现一个文件上传的例子,而且有验证
- asp.net,C#,html控件的File控件实现多文件上传简单实例,vs2010
- 使用apache commons-fileupload.jar 实现文件上传
- 使用ajaxfileupload.js插件实现Ajax方式上传文件