將byte[]數群組轉換為映像輸出到頁面

來源:互聯網
上載者:User
  1. //  
  2. byte[] imageData = (byte[]) ImageUtil.getImage(...);  
  3.                  
  4. response.setContentType("image/png");  
  5. OutputStream output = response.getOutputStream();  
  6. InputStream in = new ByteArrayInputStream(imageData);  
  7. int len;  
  8. byte[] buf = new byte[1024];  
  9. while ((len = in.read(buf)) != -1) {  
  10.    output.write(buf, 0, len);  
  11. }  
  12. output.flush();  
  13. //如果沒有下面兩行,可能出現getOutputStream() has already been called for this response的異常  
  14. out.clear();  
  15. out = pageContext.pushBody();  

以上是在jsp頁面中顯示一個圖片。注意在讀取圖片的時候,圖片的路徑問題。因為tomcat讀取檔案是要參照伺服器上的路徑的,所以你需要getRealPath,像下面:File file = new File(request.getServletContext().getRealPath("/")+"jsp\\2.jpg");

下面簡單說一下我在這次圖片顯示的思考中所得到的:我的需求是從資料庫中讀取出圖片的位元組流,然後儲存成byte[],然後將這些byte[]數群組轉換成圖片顯示在jsp頁面山。我想把根據byte[]轉換成圖片並且顯示的這項功能寫成一個servlet,然後通過img標籤來顯示圖片。
得到上面的程式之後,我想這就好辦了,由於我不僅要顯示頭像,還要顯示菜肴的圖片,店鋪的圖片等,因而我在邏輯jsp中讀取出來持久化對象中的byte[]成員,然後將這個數組直接通過參數的形式傳遞給servlet,servlet再根據byte[]返回映像,這樣最後就可以成功顯示了,而且程式還具有很高的靈活性。
但是我失敗了。。。瀏覽器在解析的時候總是崩潰。。。。。根本無法顯示頁面
原因後來我想明白了,因為我把圖片的最大容量限制為2M,這樣我的參數的十六進位字串的最大容量就是2M,這些資訊在瀏覽器進行遍曆和解析的時候,會被儲存在dom節點的,但是一個dom節點的最大容量是多少呢?我想瀏覽器是有規定的,參數大小也應該是有限制的,因而發生了記憶體溢出,造成瀏覽器崩潰。。。後來我把參數去掉之後,成功的顯示了圖片。
但是這樣以來,我怎麼知道該顯示哪張圖片呢?
現在的想法是,傳遞的參數應該換一換。換成什麼呢?根據type的內容分類,然後再根據不同的類型進行細節化,因為很多持久化對象已經儲存在了固定的欄位值session對象中,那麼我們可以取得這個對象,然後取出byte數組,最後再顯示。這隻能這麼做了現在。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.