博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
input file文件上传(multiple)及FileReader:读取本地图片文件并显示
阅读量:5759 次
发布时间:2019-06-18

本文共 2193 字,大约阅读时间需要 7 分钟。

hot3.png

<input type="file" multiple> 可多图上传

FileReader:读取本地图片文件并显示

要想在页面上显示本地图片,以前我们通常的做法是将选择的图片文件上传至后端服务器,后端对其进行存储,再将图片的URL返回到前端,前端通过这个URL来显示图片。而HTML5的FileReader接口支持本地预览,FileReader接口主要是将文件读入内存,并提供相应的方法,来读取文件中的数据,当然就能显示本地图片不需上传了。目前高级浏览器实现了FileReader接口,所以像IE6这些老东西直接滚粗。

Javascript

通过getElementById获取节点,判断浏览器的兼容性,对于不支持FileReader接口的浏览器将给出一个提示并禁用input,否则监听input的change事件。

var result = document.getElementById("result"); var input = document.getElementById("file_input");  if(typeof FileReader==='undefined'){     result.innerHTML = "抱歉,你的浏览器不支持 FileReader";     input.setAttribute('disabled','disabled'); }else{     input.addEventListener('change',readFile,false); }

然后,当file_input的change事件触发时,调用函数readFile()。在readFile中,我们首先获取file对象,然后通过file的type属性来检测文件类型,我们当然只允许选择图像类型的文件,然后我们new一个FileReader实例,并调用readAsDataURL方法来读取选中的图像文件,最后在onload事件中,获取到成功读取的文件内容,并以插入一个img节点的方式显示选中的图片。

function readFile(){     var file = this.files[0];     if(!/image\/\w+/.test(file.type)){         alert("文件必须为图片!");         return false;     }     var reader = new FileReader();     reader.readAsDataURL(file);     reader.onload = function(e){         result.innerHTML = '
'     } } 

怎么样,可以看来我们并没有和后台交互就能将本地图片显示在页面中,最后我们来了解下FileReader的方法和事件。

FileReader的方法和事件

参数/事件 描述
方法
abort 中断读取
readAsText(file, [encoding]) 将文件读取为文本
该方法有两个参数,其中第二个参数是文本的编码方式,默认值为 UTF-8。这个方法非常容易理解,将文件以文本方式读取,读取的结果即是这个文本文件中的内容。
readAsBinaryString(file) 将文件读取二进制码
通常我们将它传送到后端,后端可以通过这段字符串存储文件
readAsDataURL(file) 将文件读取为DataURL
将文件读取为一串Data URL字符串,将小文件以一种特殊格式的URL地址直接读入页面。小文件指图像与html等格式的文件。
事件
onabort 数据读取中断时触发
onerror 数据读取出错时触发
onloadstart 数据读取开始时触发
onload 数据读取成功完成时触发
onloadend 数据读取完成时触发,无论成功失败

HTML5中多文件上传时如何客户端控制文件个数和大小

var files=document.getElementsByName('picfile').files, fs=files.length, s=0;

if(fs >10 ){

    alert("上传的文件数量超过10个了!请重新选择!");    

}else{

    for(var i=0;i<fs;i++){

        if(files[i].size > 1024*1024){

            alert('"'+files[i].name + "这个文件大于1M!请重新选择!");

        }

    }

}

实例

    
//multiple(多文件上传)

学习地址

http://www.jb51.net/article/95646.htm

https://segmentfault.com/q/1010000008359098?_ea=1629710

http://www.helloweba.com/view-blog-224.html

限制大小

http://www.cnblogs.com/tjzhangjianjun/p/5670972.html

 

转载于:https://my.oschina.net/u/2306318/blog/845836

你可能感兴趣的文章
《中国人工智能学会通讯》——11.60 安全隐私感知的移动 App 推荐方法
查看>>
SpringCloud之消息总线(Spring Cloud Bus)(八)
查看>>
DLA实现跨地域、跨实例的多AnalyticDB读写访问
查看>>
(十)Java B2B2C o2o多用户商城 springcloud架构 高可用的服务注册中心
查看>>
Mvp官方示例
查看>>
如何在网站中加入百度统计
查看>>
推荐系统架构设计与实现
查看>>
根分区满了之后的几种处理方法
查看>>
XGBoost与LightGBM对比
查看>>
Future和FutureTask
查看>>
highCharts图标-线性图标实例
查看>>
采用Cloudera-Manager安装CDH时,采用内嵌数据库各数据库用户密码的保存位置
查看>>
嵌入式embeddedjetty练习
查看>>
解决ListView,GridView,Gallery的Adapter中的getView多次调...
查看>>
Hack A10 devices
查看>>
Mysql find_in_set
查看>>
Citrix Receiver界面显示语言控制
查看>>
20个2013年最值得关注的网页设计趋势
查看>>
linux系统性能调优之vmstat
查看>>
探 Spring 3.1之无web.xml式 基于代码配置的servlet3.0应用
查看>>