"); //-->
在目前大多数网站上传图片到服务器之前,我们希望可以预览一下要上传的图片。这个功能可以通过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。
专栏文章内容及配图由作者撰写发布,仅供工程师学习之用,如有侵权或者其他违规问题,请联系本站处理。 联系我们
相关推荐
Cirrus Logic ARM芯片简介
总投资35亿元,凌曜半导体年产100亿颗芯片封测项目一期投产
使用单片机制作的摆动LED电子钟(3)
无刷电机控制方法(第二部分):位置控制环路
嵌入式Linux防火墙产品设计 上
从进迭时空K3看RISC-V CPU与Imagination GPU协同: 如何构建高性能SoC能力
定时控制器
用什么AD/DA芯片(70m中频)?
TDA4863AJ基本应用电路图(一)
人工智能研究实验室 NeoCognition 获 4000 万美元种子轮融资,打造类人学习智能体
谷歌第八代TPU深度解析:架构细节全揭秘
电饭煲控制器源程序
嵌入式Linux性能监控和调优 上
电热恒温箱单片机控制系统
TDA4863AJ基本应用电路图(二)
600V 超结 MOSFET 面向电动汽车、开关电源及光伏逆变器应用
鼠标电路图
有谁知道用flashpgm烧写程序时出现bus error错误该怎么办
嵌入式Linux防火墙产品设计 中
在新加坡游泳池,年轻工程师为“地球最后的探索前沿”测试机器人
[讨论]请问有做过mpeg2播放器的吗?
嵌入式Linux防火墙产品设计 下
研华重磅发布机器人行业全栈解决方案
电子车速里程表的单片机实现方案
新人报道~~
UWB超宽带技术发力,破解车辆无钥匙系统盗抢漏洞
全桥电流驱动垂直偏转放大器TDA4866电路图
定点DSP芯片TMS320F2812实现快速算法应用
太空探索技术公司(SpaceX)与 Cursor 达成合作,并获 600 亿美元收购该初创公司的选择权
嵌入式Linux性能监控和调优 下