[英]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.