zoukankan      html  css  js  c++  java
  • js实现上传文件实时显示缩略图

    <input  name="coverImage" onClick="" onchange="setImagePreview(this);" type="file" style="text-align:center;float: left;"  placeholder="只能选取 jpg、jif、bmp格式 "  />
    
    <div id="localImag" style=" 80%;height: 80%;text-align: center;margin: auto;">
       <img  id="imagePreview"  style="margin: auto;max- 250px; max-height: 200px;" alt="图片缺失" src="" />
    </div>
      1 <script type="text/javascript">
      2 function setImagePreview(obj){
      3     var img=document.getElementById("imagePreview");
      4         /*img.src=getFullPath(obj);*/
      5         testSetPreviewImg(obj);
      6 }   
      7    
      8    /**
      9     简单方式
     10    **/
     11    function testSetPreviewImg(docObj){
     12             var imgObjPreview=document.getElementById("imagePreview");
     13 
     14             var divs = document.getElementById("localImag");
     15                 if (docObj.files && docObj.files[0]) {
     16                     //火狐下,直接设img属性
     17                     imgObjPreview.style.display = 'block';
     18                     //imgObjPreview.style.width = '80%';
     19                    // imgObjPreview.style.height = '80%';
     20                     //imgObjPreview.src = docObj.files[0].getAsDataURL();
     21                     //火狐7以上版本不能用上面的getAsDataURL()方式获取,需要一下方式
     22                    imgObjPreview.src = window.URL.createObjectURL(docObj.files[0]);
     23                 } else {
     24                     //IE下,使用滤镜
     25                     docObj.select();
     26                     var imgSrc = document.selection.createRange().text;
     27                     var localImagId = document.getElementById("localImag");
     28                     //必须设置初始大小
     29                    // localImagId.style.width = "80%";
     30                     //localImagId.style.height = "80%";
     31                     //图片异常的捕捉,防止用户修改后缀来伪造图片
     32                     try {
     33                         localImagId.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)";
     34                         localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc;
     35                     } catch(e) {
     36                         alert("您上传的图片格式不正确,请重新选择!");
     37                         return false;
     38                     }
     39                     imgObjPreview.style.display = 'none';
     40                     document.selection.empty();
     41                 }
     42 
     43 }
     44 
     45 
     46    
     47    
     48    
     49    /**
     50    一般在处理图片上传时,通常的逻辑都是将源图片上传到服务器端,再由服务器端的语言进行缩放大小的操作。
     51     此种模式一般可以满足大部分的需求,但当我们所需要的图片仅仅是一个符合规定大小的源图片的缩略图,再使用此种模式,将是一种浪费服务端资源以及带宽的方式,故我们考虑在浏览器端生成小图后再进行上传操作。
     52     _canvas获取到的是base64编码的图片编码,将其传输到后端写入文件即可。
     53     **/
     54 function drawCanvasImage(obj,width, callback){  
     55   
     56      var $canvas = $('<canvas></canvas>'),  
     57         canvas = $canvas[0],  
     58         context = canvas.getContext('2d');  
     59   
     60      var img = new Image();  
     61   
     62      img.onload = function(){  
     63          if(width){  
     64              if(width > img.width){  
     65                  var target_w =  img.width;  
     66                  var target_h = img.height;  
     67              }else{  
     68                  var target_w = width;  
     69                  var target_h = parseInt(target_w/img.width*img.height);  
     70              }  
     71          }else{  
     72              var target_w =  img.width;  
     73              var target_h = img.height;  
     74          }  
     75          $canvas[0].width = target_w;  
     76          $canvas[0].height = target_h;  
     77   
     78          context.drawImage(img,0,0,target_w,target_h);  
     79          _canvas = canvas.toDataURL("image/png");  
     80         /* _canvas = canvas.toDataURL(); */ 
     81          /*console.log(_canvas);*/  
     82          try{
     83             callback(obj,_canvas);  
     84          }catch(e){}
     85          
     86      }  
     87      img.src = getFullPath(obj);  
     88   
     89 }  
     90  /**函数getFullPath为获取选中的图片的本地地址**/ 
     91 function getFullPath(obj)  
     92 {  
     93     if(obj)  
     94     {  
     95         //ie  
     96         if (window.navigator.userAgent.indexOf("MSIE")>=1)  
     97         {  
     98             obj.select();  
     99             return document.selection.createRange().text;  
    100         }  
    101         //firefox  
    102         else if(window.navigator.userAgent.indexOf("Firefox")>=1 || $.browser.opera || $.browser.mozilla)  
    103         {  
    104             if(obj.files && window.URL.createObjectURL)  
    105             {  
    106                 return window.URL.createObjectURL(obj.files[0]);  
    107             }  
    108             return obj.value;  
    109         }else if($.browser.safari){  
    110             if(window.webkitURL.createObjectURL && obj.files){  
    111                 return window.webkitURL.createObjectURL(obj.files[0]);  
    112             }  
    113             return obj.value;  
    114         }  
    115         return obj.value;  
    116     }  
    117 }
    118 
    119 
    120 /**实现即时显示上传缩略图,**/
    121 var allowExt = ['jpg', 'gif', 'bmp', 'png', 'jpeg']; 
    122 var preivew = function(file, container){ 
    123     try{ 
    124         var pic =  new Picture(file, document.getElementById(container)); 
    125     }catch(e){ 
    126         alert(e); 
    127     } 
    128 } 
    129 
    130 
    131 //缩略图类定义 
    132 var Picture  = function(file, container){ 
    133     var height = 0, 
    134     widht  = 0, 
    135     ext    = '', 
    136     size   = 0, 
    137     name   = '', 
    138     path   =  ''; 
    139     var self   = this; 
    140     if(file){ 
    141         name = file.value; 
    142         if(window.navigator.userAgent.indexOf("MSIE")>=1){ 
    143             file.select(); 
    144             path = document.selection.createRange().text; 
    145         }else if(window.navigator.userAgent.indexOf("Firefox")>=1){  
    146             if(file.files){ 
    147                 path =  file.files.item(0).getAsDataURL(); 
    148             }else{ 
    149                 path = file.value; 
    150             } 
    151         } 
    152     }else{ 
    153         throw '无效的文件'; 
    154     } 
    155     ext = name.substr(name.lastIndexOf("."), name.length); 
    156     if(container.tagName.toLowerCase() != 'img'){ 
    157         throw '不是一个有效的图片容器'; 
    158         container.visibility = 'hidden'; 
    159     } 
    160     container.src = path; 
    161     container.alt = name; 
    162     container.style.visibility = 'visible'; 
    163     height = container.height; 
    164     widht  = container.widht; 
    165     size   = container.fileSize; 
    166     this.get = function(name){ 
    167         return self[name]; 
    168     } 
    169     this.isValid = function(){ 
    170         if(allowExt.indexOf(self.ext) !== -1){ 
    171             throw '不允许上传该文件类型'; 
    172             return false; 
    173         } 
    174     } 
    175 } 
    176   
    177</script> 
  • 相关阅读:
    ARM处理器
    进程和线程通俗理解
    const与指针
    字符提取命令
    ThinkPHP之视图模版的使用
    ThinkPHP之MVC与URL访问
    ThinkPHP之项目搭建
    android之文件存储和读取
    cryptdb中wrapper.lua的分析
    cryptDB安装分析
  • 原文地址:https://www.cnblogs.com/weixupeng/p/8866515.html
Copyright © 2011-2022 走看看