js实现图片上传并正常显示

2019-12-17,,,

项目经常会用到头像上传,那么怎么实现呢?

首先是HTML布局:

<label for="thumbnail" class="col-md-3 control-label">缩略图</label>
<div class="col-md-6">
 <input type="file" class="form-control" id="thumbnail" name="thumbnail">
</div>

jquery方式,IE不支持,但IE会获得绝对的上传路径信息:

function getObjectURL(file) {
 var url = null ;
 if (window.createObjectURL!=undefined) { // basic
 url = window.createObjectURL(file) ;
 } else if (window.URL!=undefined) { // mozilla(firefox)
 url = window.URL.createObjectURL(file) ;
 } else if (window.webkitURL!=undefined) { // webkit or chrome
 url = window.webkitURL.createObjectURL(file) ;
 }
 return url ;
}

$('#thumbnail').change(function() {
 var eImg = $('<img />');
 eImg.attr('src', getObjectURL($(this)[0].files[0])); // 或 this.files[0] this->input
 $(this).after(eImg);});

网上找一份可用的代码非常不易,经过不断的筛选总结才得出兼容所有的文件上传显示
HTML布局

<form action='' method='post' name='myform'>
 <input type='file' id='iptfileupload' onchange='show()' value='' />
 <img src='1.jpg' alt='' id='img' />
</form>

JS代码:

<script type="text/javascript">
 function getPath(obj,fileQuery,transImg) {

  var imgSrc = '', imgArr = [], strSrc = '' ;

  if(window.navigator.userAgent.indexOf("MSIE")>=1){ // IE浏览器判断
  if(obj.select){
   obj.select();
   var path=document.selection.createRange().text;
   alert(path) ;
   obj.removeAttribute("src");
   imgSrc = fileQuery.value ;
   imgArr = imgSrc.split('.') ;
   strSrc = imgArr[imgArr.length - 1].toLowerCase() ;
   if(strSrc.localeCompare('jpg') === 0 || strSrc.localeCompare('jpeg') === 0 || strSrc.localeCompare('gif') === 0 || strSrc.localeCompare('png') === 0){
   obj.setAttribute("src",transImg);
   obj.style.filter=
    "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+path+"', sizingMethod='scale');"; // IE通过滤镜的方式实现图片显示
   }else{
   //try{
   throw new Error('File type Error! please image file upload..'); 
   //}catch(e){
   // alert('name: ' + e.name + 'message: ' + e.message) ;
   //}
   }
  }else{
   // alert(fileQuery.value) ;
   imgSrc = fileQuery.value ;
   imgArr = imgSrc.split('.') ;
   strSrc = imgArr[imgArr.length - 1].toLowerCase() ;
   if(strSrc.localeCompare('jpg') === 0 || strSrc.localeCompare('jpeg') === 0 || strSrc.localeCompare('gif') === 0 || strSrc.localeCompare('png') === 0){
   obj.src = fileQuery.value ;
   }else{
   //try{
   throw new Error('File type Error! please image file upload..') ;
   //}catch(e){
   // alert('name: ' + e.name + 'message: ' + e.message) ;
   //}
   }

  }

  } else{
  var file =fileQuery.files[0];
  var reader = new FileReader();
  reader.onload = function(e){

   imgSrc = fileQuery.value ;
   imgArr = imgSrc.split('.') ;
   strSrc = imgArr[imgArr.length - 1].toLowerCase() ;
   if(strSrc.localeCompare('jpg') === 0 || strSrc.localeCompare('jpeg') === 0 || strSrc.localeCompare('gif') === 0 || strSrc.localeCompare('png') === 0){
   obj.setAttribute("src", e.target.result) ;
   }else{
   //try{
   throw new Error('File type Error! please image file upload..') ;
   //}catch(e){
   // alert('name: ' + e.name + 'message: ' + e.message) ;
   //}
   }

   // alert(e.target.result); 
  }
  reader.readAsDataURL(file);
  }
 }

 function show(){
  //以下即为完整客户端路径
  var file_img=document.getElementById("img"),
  iptfileupload = document.getElementById('iptfileupload') ;
  getPath(file_img,iptfileupload,file_img) ;
 }
 </script>

更多精彩内容请参考专题《ajax上传技术汇总》,《javascript文件上传操作汇总》和《jQuery上传操作汇总》进行学习。

希望本文所述对大家学习javascript程序设计有所帮助。

您可能感兴趣的文章:

  • js实现图片上传并预览功能
  • Javascript图片上传前的本地预览实例
  • js图片上传前预览功能(兼容所有浏览器)
  • 图片上传即时显示缩略图的js代码
  • js实现图片上传预览原理分析
  • JS移动端/H5同时选择多张图片上传并使用canvas压缩图片
  • 图片上传之前检查大小、尺寸、格式并预览的js代码
  • 使用jquery.form.js实现图片上传的方法
  • Vue.js 2.0 移动端拍照压缩图片上传预览功能
  • js实现GIF动图分解成多帧图片上传

《js实现图片上传并正常显示.doc》

下载本文的Word格式文档,以方便收藏与打印。