通过FileReader实现上传图片预览功能及源码分享
在目前大多数网站上传图片到服务器之前,我们希望可以预览一下要上传的图片。这个功能可以通过HTML5的FileReader()方法来实现。
FileReader是HTML5FileAPI的一部分。它实现了一种异步文件读取机制。可以把FileReader想象为XMLHttpRequest,区别只是它读取的是文件系统,而不是远程服务器。为了读取文件中的数据,FileReader提供了如下几个方法。
readAsText(file,encoding):以纯文本的方式读取文件,将读取到的文件保存到result属性中。
readAsDataURL(file):读取文件并将文件以数据URI的形式保存在result属性中。
readAsBinaryString(file):读取文件并将一个字符串保存在result属性中,字符串中的每个字符表示一个字节。
readAsArrayBuffer(file):读取文件并将一个包含文件内容的ArrayBuffer保存在result属性中。
通过readAsDataURL(file)方法,我们就可以将读取到的图片数据以URI的方式显示在页面中。
例如下面是一个上传图片预览的例子:
上面例子中的HTML代码如下:
下面是结合jQuery和FileReader来实现上传图片预览的代码:
$("#fileUpload").on("change",function(){
if(typeof(FileReader)!="undefined"){
varimage_holder=$("#image-holder");
image_holder.empty();
varreader=newFileReader();
reader.onload=function(e){
$("",{
"src":e.target.result,
"class":"thumb-image"
}).appendTo(image_holder);
}
image_holder.show();
reader.readAsDataURL($(this)[0].files[0]);
}else{
alert("你的浏览器不支持FileReader.");
}
});
实现多张图片预览效果
先来看看效果,下面是一个可以预览多张上传图片的例子。
在前面我们已经可以预览一张上传的图片。要想实现多张图片预览效果,必须在文件上传标签中添加multiple属性,使它可以选择多张图片。
然后修改一下上面的jQuery代码,使用一个循环来遍历所有要上传的图片,最后将它们分别显示出来。
$("#fileUpload").on("change",function(){
//获取上传文件的数量
varcountFiles=$(this)[0].files.length;
varimgPath=$(this)[0].value;
varextn=imgPath.substring(imgPath.lastIndexOf(".")+1).toLowerCase();
varimage_holder=$("#image-holder");
image_holder.empty();
if(extn=="gif"||extn=="png"||extn=="jpg"||extn=="jpeg"){
if(typeof(FileReader)!="undefined"){
//循环所有要上传的图片
for(vari=0;i
varreader=newFileReader();
reader.onload=function(e){
$("",{
"src":e.target.result,
"class":"thumb-image"
}).appendTo(image_holder);
}
image_holder.show();
reader.readAsDataURL($(this)[0].files[i]);
}
}else{
alert("你的浏览器不支持FileReader!");
}
}else{
alert("请选择图像文件。");
}
});
最后想要工作不累就要不断的提升自己的技能,请关注扣丁学堂HTML5培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的HTML5视频教程系统,通过千锋扣丁学堂金牌讲师在线录制的第一套自适应HTML5在线视频课程系统,让你快速掌握HTML5从入门到精通开发实战技能。扣丁学堂H5技术交流群:751662650。
小米有品上架户外求生刀多功能满足多场景需求CiaoBello,我是老房。作为一名旅游爱好者,自驾游是老房的首选旅行方式。无拘无束的自由行程,随心所欲的走哪儿停哪儿,比起必须准时起床掐点赶飞机火车大巴实在是要轻松很多。但自驾
掌阅FaceNote电纸书,让阅读真正的无处不在CiaoBello,我是老房。提到掌阅想必大家都很熟悉,作为一款知名电子书阅读软件,掌阅其实很早就推出了自家的电纸书阅读器,超高的性价比搭配掌阅海量的正版图书资源,在当年那个几乎被
牛听听读书牛绘本阅读不发愁CiaoBella,我是老房。家中小朋友已经四岁,虽然还是处于喜欢疯玩的年纪,但逐渐的也要开始进入学习状态了。家中各类绘本童书也买过不少,其实儿子也挺喜欢读书的,但老房自从工作调动
买旅行箱送小米手机?618买箱包,开箱未知惊喜CiaoBella,我是老房。临近618,又到了每年买买买的剁手季。疫情逐步好转,各行各业也渐渐复苏,是不是心里痒起来想要出去旅游了,正好趁着618这个时间买个旅行箱,趁着春暖花开
告别湿毒智米除菌加湿器1s在这个病毒肆虐闹心闹神的一年,守护我家人健康是我老房必须担当的责任和使命。根据名古屋大学教授须藤千春的研究,温暖干燥的空气环境易于细菌病毒的滋生和传播,另外干燥环境中,室内可吸入颗
有颜有实力的防摔神器Defense决色华为P40手机壳CiaoBella,我是老房。华为P40系列手机在国内已于4月8日发布,根据相关报道,华为P40系列手机在国内各大电商平台的预售量已突破140万,而Pro版更受欢迎,足以见得该系列
体积小颜值高净水烧水煮茶一体的莱卡mini净饮机体验CiaoBello,我是老房。其实老房一直想整一个功夫茶盘,这喝茶喝起来才能更有感觉,而且还会显得更加专业。但苦于家中桌面面积实在太小,放不下硕大的茶盘,而且功夫茶的确要花功夫,懒
苹果官方推荐电脑包和手机壳,是否真的值得买?CiaoBella,我是老房。用了这么多年苹果产品,iPodiPadiPhoneAppleWatch以及MacBook,基本都有涉猎。苹果产品的工业设计一直为人津津乐道,纤薄的机身
宝宝坐着舒服和安全才是最重要,360安全座椅使用体验CiaoBella,我是老房。一安全座椅的重要性关于小朋友乘坐汽车安全座椅的必要性很多文章都已经讲的很清楚了,从安全隐患角度来看,这和成年人开车坐车时必须要系安全带是道理相同。由于
比亚迪重回巅峰领先特斯拉成全球新能源单月销量榜首今年6月份的时候,比亚迪以出色的销量成绩,登顶中国新能源汽车市场销量榜首,随后继续突破极限。比亚迪不仅在自主品牌上有着亮眼表现,在全球新能源汽车消费市场中,照样展现出不错的数据成绩
珠宝没特色?快来看看ROSEONLY的珠宝设计Blingbling的珠宝相信没有女孩子会不喜欢,很多好看的男孩子也都爱上珠宝了呢。但是,市面上的珠宝同质化真的很严重,好像看来看去都是那么几种设计,千篇一律好没意思。太有个性的珠