htmlfile⽂件类型赋值到img,基于jquery实现图⽚上传本地预览
功能
当我们在上传⽂件时如果每次都要上传到服务器才可以预览这个做看上合理其实是不合理的,如果⽹速慢或图⽚有问题,这样不但浪费客户时间同时也浪费服务器资源了,下⾯我们介绍利⽤js上传图⽚时本地实现预览,希望此⽅法对各位有所帮助哦。
⼀、原理
分为两步:
当上传图⽚的input被触发并选择本地图⽚之后获取要上传的图⽚这个对象的URL(对象URL);
把对象URL赋值给事先写好的img标签的src属性即可把图⽚显⽰出来。
在这⾥,我们需要了解Javascript⾥File对象、Blob对象和ateObjectURL()⽅法。
1、File对象
File对象可以⽤来获取某个⽂件的信息,还可以⽤来读取这个⽂件的内容.通常情况下,File对象是来⾃⽤
户在⼀个input元素上选择⽂件后返回的FileList对象,也可以是来⾃由拖放操作⽣成的 DataTransfer对象.
下⾯来看获取FileList对象:
$('#upload').change(function(){
// 获取FileList的第⼀个元素
lementbyid('upload').files[0]);
});
2、Blob对象
⼀个Blob对象就是⼀个包含有只读原始数据的类⽂件对象.Blob对象中的数据并不⼀定得是JavaScript中的原⽣形式.File接⼝基于Blob,继承了Blob的功能,并且扩展⽀持了⽤户计算机上的本地⽂件.
我们想要得到的对象URL实际上就是从Blob这个对象获取的,因为File的接⼝继承Blob。下⾯就来把Blob对象转换成URL:
var f = lementbyid('upload').files[0];
var src = ateObjectURL(f);
⼀个⽐较完整的实例
HTML5 Upload
#destination{
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(true,sizingMethod=scale);
}
//处理file input加载的图⽚⽂件
$(document).ready(function(e) {
//判断浏览器是否有FileReader接⼝
if(typeof FileReader =='undefined')
{
$("#destination").css({'background':'none'}).html('亲,您的浏览器还不⽀持HTML5的FileReader接⼝,⽆法使⽤图⽚本地预览,请更新浏览器获得最好体验');
//如果浏览器是ie
if($.browser.msie===true)
{
//ie6直接⽤file input的value值本地预览
if($.browser.version==6)
{
$("#imgUpload").change(function(event){
//ie6下怎么做图⽚格式判断?
var src = event.target.value;
//var src = ateRange().text; //选中后 selection对象就产⽣了 这个对象只适合ie
var img = ''+src+'';
$("#destination").empty().append(img);
});
}
//ie7,8使⽤滤镜本地预览
else if($.browser.version==7 || $.browser.version==8)
{
$("#imgUpload").change(function(event){
$(event.target).select();
var src = ateRange().text;
var dom = ElementById('destination');
//使⽤滤镜 成功率⾼
dom.filters.item('DXImageTransform.Microsoft.AlphaImageLoader').src= src;
dom.innerHTML = '';
//使⽤和ie6相同的⽅式 设置src为绝对路径的⽅式 有些图⽚⽆法显⽰ 效果没有使⽤滤镜好
/*var img = ''+src+'';
$("#destination").empty().append(img);*/
});
}
}
/jquery下载的文件怎么使用
/如果是不⽀持FileReader接⼝的低版本firefox 可以⽤getAsDataURL接⼝
else if($.illa===true)
{
$("#imgUpload").change(function(event){
//firefox2.0没有event.target.files这个属性 就像ie6那样使⽤value值 但是firefox2.0不⽀持绝对路径嵌⼊图⽚ 放弃firefox2.0
//firefox3.0开始具备event.target.files这个属性 并且开始⽀持getAsDataURL()这个接⼝ ⼀直到firefox7.0结束 不过以后都可以⽤HTML5的FileReader接⼝了
if(event.target.files)
{
//console.log(event.target.files);
for(var i=0;i
{
var img = '';
$("#destination").empty().append(img);
}
}
else
{
//console.log(event.target.value);
//$("#imgPreview").attr({'src':event.target.value});
}
});
}
}
else
{
// version 1
/*$("#imgUpload").change(function(e){
var file = e.target.files[0];
var fReader = new FileReader();
//console.log(fReader);
//console.log(file);sqlserver数据库菜鸟教程
fReader.οnlοad=(function(var_file)
{
return function(e)
mysqltimestampdiff
{
$("#imgPreview").attr({'src':sult,'alt':var_file.name});
}
})(file);
});*/
//单图上传 version 2
/*$("#imgUpload").change(function(e){
var file = e.target.files[0];
var reader = new FileReader();
//displayImage($('bd'),sult);
//alert('load');
$("#imgPreview").attr({'src':sult});
}
});*/
ssl协议怎么开启//多图上传 input file控件⾥指定multiple属性 e.target是dom类型executions和recitals
$("#imgUpload").change(function(e){
for(var i=0;i
{
var file = e.target.files.item(i);
//允许⽂件MIME类型 也可以在input标签中指定accept属性
//console.log(/^image/.*$/i.pe));
eval函数返回的是什么类型if(!(/^image/.*$/i.pe)))
{
continue; //不是图⽚ 就跳出这⼀次循环
}
//实例化FileReader API
var freader = new FileReader();
freader.οnlοad=function(e)
{
var img = ''+sult+''; $("#destination").empty().append(img);
}
}
});
//处理图⽚拖拽的代码
var destDom = ElementById('destination');
destDom.addEventListener('dragover',function(event){
event.stopPropagation();
event.preventDefault();
},false);
destDom.addEventListener('drop',function(event){
event.stopPropagation();
event.preventDefault();
var img_file = event.dataTransfer.files.item(0); //获取拖拽过来的⽂件信息 暂时取⼀个
//console.log(event.dataTransfer.files.item(0).type);
if(!(/^image/.*$/.test(pe)))
{
alert('您还未拖拽任何图⽚过来,或者您拖拽的不是图⽚⽂件');
return false;
}
fReader = new FileReader();
destDom.innerHTML='';
destDom.innerHTML = ''+sult+'';
};
},false);
}
});
⼆、兼容性
·
上述⽅法适⽤于chrome浏览器
·如果是IE浏览器可以直接使⽤input的value来代替src
·⽹上查看资料有直接使⽤File对象的getAsDataURL()⽅法获取URL的,现在这个⽅法都已经废除,类似的还有getAsText()和getAsBinary()⽅法;
以上就是本⽂的全部内容,希望对⼤家的学习有所帮助。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。