js实现上传文件实时显示缩略图

<input  name="coverImage" onClick="" onchange="setImagePreview(this);" type="file" style="text-align:center;float: left;"  placeholder="只能选取 jpg、jif、bmp格式 "  />

<div id="localImag" style="width: 80%;height: 80%;text-align: center;margin: auto;">
   <img  id="imagePreview"  style="margin: auto;max-width: 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> 

 

posted @ 2018-04-17 14:49  ƃuədnxıəʍ  阅读(756)  评论(0编辑  收藏  举报