圖片上傳預覽是一種在圖片上傳之前對圖片進行本地預覽的技術。
使使用者選擇圖片後能立即查看圖片,而不需上傳伺服器,提高使用者體驗。
但隨著瀏覽器安全性的提高,要實現圖片上傳預覽也越來越困難。
不過群眾的智慧是無限的,網上已經有很多變通或先進的方法來實現。
例如ie7/ie8的濾鏡預覽法,firefox 3的getAsDataURL方法。
但在opera、safari和chrome還是沒有辦法實現本地預覽,只能通過後台來支援預覽
| 代碼如下 |
複製代碼 |
<style type="text/css"> #newPreview { filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale); } .style1 { width: 507px; } </style> </head> <script language="javascript" type="text/javascript"> function PreviewImg(imgFile) { var newPreview = document.getElementById("newPreview"); newPreview.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgFile.value; newPreview.style.width = "158px"; newPreview.style.height = "180px"; } </script> <div id="newPreview"></div> <asp:FileUpload ID="FileUpload1" onchange="PreviewImg(this)" runat="server" Width="408px" /> |
在 IE6 中,可以很方便地利用 img 的 src 屬性,實現本地圖片預覽,然而在 IE7 中,這種辦法卻行不通
下面來一段相容性比較強的代碼
| 代碼如下 |
複製代碼 |
<script language="javascript"> var isIE = false; var isFF = false; var isSa = false; if((navigator.userAgent.indexOf("MSIE")>0) && (parseInt(navigator.appVersion) >=4))isIE = true; if(navigator.userAgent.indexOf("Firefox")>0)isFF = true; if(navigator.userAgent.indexOf("Safari")>0)isSa = true; function fileChange(obj) { if(isIE) { var url = obj.value; url = "file:///" + url.replace("\",'/'); } else if(isFF) { var url = obj.files.item(0).getAsDataURL(); } document.getElementById("ImageFile").src= url; } </script> <asp:FileUpload id=FileUpload1 onchange="fileChange(this);" runat="server"></asp:FileUpload><asp:Image id=ImageFile runat="server"></asp:Image> |
明明IE和Firefox都正常的代碼,這個小不點的chrome瀏覽器非要跳出來不相容你的代碼。請無視google吧。
firefox使用了getAsDataURL方法,而IE是用了濾鏡。
| 代碼如下 |
複製代碼 |
<input type=file name="doc" id="doc" onchange="javascript:setImagePreview();"> <p> <div id="localImag"><img id="preview" width=-1 height=-1 style="diplay:none" /></div> </p> <script> function setImagePreview() { var docObj=document.getElementById("doc"); var fileName = docObj.value; var imgObjPreview=document.getElementById("preview"); if(docObj.files && docObj.files[0]){ //Firefox下,直接設img屬性 imgObjPreview.style.display = 'block'; imgObjPreview.style.width = '150px'; imgObjPreview.style.height = '120px'; imgObjPreview.src = docObj.files[0].getAsDataURL(); }else{ //IE下,使用濾鏡 docObj.select(); var imgSrc = document.selection.createRange().text; var localImagId = document.getElementById("localImag"); //必須設定初始大小 localImagId.style.width = "150px"; localImagId.style.height = "120px"; //圖片異常的捕捉,防止使用者修改尾碼來偽造圖片 try{ localImagId.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale)"; localImagId.filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = imgSrc; }catch(e){ alert("您上傳的圖片格式不正確,請重新選擇!"); return false; } imgObjPreview.style.display = 'none'; document.selection.empty(); } return true; } </script> |