開發(fā)人員都知道<img src="">標(biāo)簽,只要src指定相應(yīng)路徑就能夠顯示圖片,但是這里有一個(gè)限制條件:如果項(xiàng)目被部署在服務(wù)器上(比如Java web項(xiàng)目部署在tomcat下)運(yùn)行時(shí),src路徑只能指定項(xiàng)目中的圖片。比如<img src="/common/java.jpg">表示顯示該項(xiàng)目下common目錄下的名為java.jpg的圖片。而如果你希望顯示服務(wù)器某個(gè)盤符下的指定圖片,比如<img src="c:\xxx\xx.jpg">,即使該目錄下有指定圖片,這樣寫也是找不到該圖片的,因?yàn)槌鲇诎踩钥紤]不能讀取當(dāng)前項(xiàng)目以外的數(shù)據(jù)。
最近在做一個(gè)小項(xiàng)目玩,有個(gè)添加用戶功能,我需要上傳用戶圖片后在頁(yè)面顯示該用戶圖片。上傳功能已實(shí)現(xiàn),代碼在這里可以看到: http://blessht.iteye.com/blog/1405057 ,為了防止圖片丟失,我的圖片是上傳到硬盤指定目錄下,現(xiàn)在的難題是如何把圖片顯示出來(lái)。
在網(wǎng)上看了很多解決方案,其中有一種方案我覺(jué)得很好:img標(biāo)簽的src不是圖片路徑,而是一個(gè)servlet請(qǐng)求,該servlet通過(guò)java代碼讀取圖片并以流的形式將圖片數(shù)據(jù)打印到頁(yè)面,這樣就能顯示指定盤符下的圖片了。
首先看下運(yùn)行效果:
??
?
- 實(shí)現(xiàn)說(shuō)明
<script> ...... function openUpload_(){ openUpload(null,'JPG,GIF,JPEG,PNG','5',callback); } /** * 回調(diào)函數(shù),獲取上傳文件信息 * realName真實(shí)文件名 * saveName文件保存名 * maxSize文件實(shí)際大小 */ function callback(realName,saveName,maxSize){ $("#photo_").val(saveName); $("#div_photo").load(root+"/showImage.jsp?saveName="+saveName+"&width_=200&height_=200"); } </script> ...... <tr> <td>頭像:</td> <td> <input type="hidden" name="photo" id="photo_"></input> <input type="button" onclick="openUpload_()" value="上傳"/> </td> </tr> <tr> <td colspan="2"> <div id="div_photo"></div> </td> </tr>
<body> <% String root = request.getContextPath(); String saveName = request.getParameter("saveName"); String width_ = request.getParameter("width_"); String height_ = request.getParameter("height_"); %> <img src="<%=root%>/CommonController.jhtml?method=showImage&saveName=<%=saveName%>" width="<%=width_%>" height="<%=height_%>"> </body>
/** * 顯示圖片 * @param request * @param response * @return * @throws ServletException * @throws IOException */ public ModeAndView showImage(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String saveName = request.getParameter("saveName"); FileInputStream hFile = new FileInputStream(fileUploadPro.getProperty("filePath")+saveName); // 以byte流的方式打開文件 d:\1.gif int i=hFile.available(); //得到文件大小 byte data[]=new byte[i]; hFile.read(data); //讀數(shù)據(jù) response.setContentType("image/*"); //設(shè)置返回的文件類型 OutputStream toClient=response.getOutputStream(); //得到向客戶端輸出二進(jìn)制數(shù)據(jù)的對(duì)象 toClient.write(data); //輸出數(shù)據(jù) toClient.flush(); toClient.close(); hFile.close(); return null; }
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
