簡體   English   中英

如何將blob轉換為JSP中顯示的圖像

[英]How do i convert blob to image displayed in a JSP

我正在嘗試從數據庫中檢索圖像。 目前我能夠顯示:

    `com.mysql.jdbc.Blob@2aba2aba `

在我的jsp輸出中。 我可以知道如何將其轉換為圖像嗎?

我用下面的內容來說明以上內容

photo[i].getPhotoFileData();

對於HTML文檔的工作方式而言,這比使用JSP更具問題。 您需要了解HTML不會直接嵌入圖像。 相反,它使用<img>標簽來引用托管在不同URL上的圖像。

為了在HTML頁面上顯示存儲在數據庫中的圖像,您將需要一個可以處理圖像請求的單獨servlet。 您的JSP應該呈現如下的HTML文檔:

<html>
  <head>
  ...
  </head>
  <body>
    ...
    <img src="www.mydomain.com/images/1234.png" />
    ...
  </body>
</html>

然后,您將創建一個單獨的servlet來處理對/ images的所有請求,這些請求將進行數據庫調用並從它返回到響應的輸出流的blob發送原始字節。 確保您還根據您正在使用的圖像編碼正確設置Content-Type標頭。

為了將圖像發送回請求者,您有兩個選項之一。 您可以將blob的字節作為數組獲取並將其寫入OutputStream(例如out.write(blob.getBytes(0,blob.length()); )。或者您可以使用getBinaryStream()方法然后從中復制字節InputStream的InputStream。這是一個例子:

public static void copy(Blob from, OutputStream to)
    throws IOException {
  byte[] buf = new byte[4096];
  try(InputStream is = from.getBinaryStream()) {
    while (true) {
      int r = is.read(buf);
      if (r == -1) {
        break;
      }
      to.write(buf, 0, r);
    }
  }
}

注意:此代碼尚未經過測試甚至編譯,只能用作起點。

你得到一個Blob對象 - 而不是它的內容。 如果要獲取原始字節數據,則必須向Blob對象詢問它,例如:

Blob blob =  photo[i].getPhotoFileData();
byte[] data = blob.getBytes(0, blob.length());

如果你想動態創建一個圖像,那么只需調用:

BufferedImage img = ImageIO.read(new ByteArrayInputStream(data));

然后你可以保存圖像或...實際上我不知道還有什么。 事情。 東西。 顯示它。 打印。 無限的可能性! 就像在zombo.com一樣!

首先將blob轉換為輸入流到字符串。 然后使用該String而不是圖像URL。

將blob轉換為String

        try {
            Blob blob = staticOffer.getImage(); //blob of image from db
            strOut = new StringBuffer();
            String aux;
            BufferedReader br;

            br = new BufferedReader(new InputStreamReader(blob.getBinaryStream()));
            while ((aux=br.readLine())!=null) {
                strOut.append(aux);
            }
            offerPicStr = strOut.toString();

        } catch (Exception e) {
            e.printStackTrace();
        }

現在以下面的方式使用該字符串html / jsp

<img src="data:image/jpeg;base64,${offerPicStr}" width="100" height="100"></img>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM