經常用到上傳圖片即時預覽的功能,實現方式很多,用flash+js實現的比較多,今天遇到同事不想用flash之類也不想用網上的插件,那麼我給了他一種解決辦法:
思路:
1. 頁面上傳圖片的部分放到一個iframe中,iframe設置無邊框無滾動條,和所嵌入的頁面風格一致,根據需要設置固定大小
2. 在iframe中提交上傳圖片的表單,提交後再次返回原頁面(iframe所指向的頁面)並從服務器帶回剛上傳的圖片地址,調用父頁面的js代碼加載圖片
3. 如果用到要進度條等效果,就在表單提交後,在servlet一端輸出進度條,然後一直發送調用js腳本,及時改變頁面內容。其他功能諸如取消等功能可以參考推送
下面的代碼實現了基本的文件上傳:
index.jsp頁面裡嵌入一個文件上傳的頁面 _uploadpic.jsp
index.jsp:
... <script type="text/javascript"> /* param imgPath:img path of uploaded this function will show the uploaded img in div(id=show_img_div) */ function showUploadImg(imgPath){ if(imgPath=="")return; document.getElementById("show_img_div").innerHTML="<img src='"+imgPath+"'/>"; } </script> <body> <iframe scrolling="no"width="300" height="100" src="_uploadpic.jsp"></iframe> <!-- use to show img(uploaded) --> <div id="show_img_div"></div> ...
_uploadpic.jsp:
... <body onload="javascript:window.parent.showUploadImg('${img}');"><!--'${img}' request或者session中的圖片地址(從服務器傳遞來的) --> <form method="post" id="upload_form" action="${pageContext.request.contextPath }/servlet/IframeTestImageServlet" enctype="multipart/form-data"> <input type="file" name="pic"/><br/><input type="submit" value="upload"/> </form> </body> ...
servlet:(處理圖片上傳的servlet)
//處理上傳的圖片 .... 代碼多 此處略去 //把剛上傳的圖片在服務器中的地址返回到客戶端 request.setAttribute("img",request.getContextPath()+"/img/mm.jpg");// '/img/mm.jpg'表示剛上傳圖片在服務器中的地址 request.getRequestDispatcher("/_uploadpic.jsp").forward(request, response);
以上這篇用iframe實現不刷新整個頁面上傳圖片的實例就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持。