[前端] 上传图片并显示

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

 

首先是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;
                   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{
                       throw new Error('File type Error! please image file upload..');  
                   }
               }else{
                   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{
                       throw new Error('File type Error! please image file upload..') ;
                   }

               }

           } 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{
                       throw new Error('File type Error! please image file upload..') ;
                   }
               }
               reader.readAsDataURL(file);
           }
       }

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

 

stringObject.localeCompare(target) 用本地特定的顺序比较两字符串

小于target 返回小于0的数

等于target返回0

大于target返回大于0的数

 

fileReader H5出来的新对象

 

 

DEMO下载 http://pan.baidu.com/s/1bn4kfX9

欢迎关注技术开发分享录:http://fenxianglu.cn/

 

 

 

 

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天空还下着雪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值