データベースから画像を取得しようとしています。現在、私は示すことができました:
`com.mysql.jdbc.Blob@2aba2aba `
私のjsp出力で。それを画像に変換する方法を教えてください。
私は上記を呼び出すために以下を使用しました
photo[i].getPhotoFileData();
これは、JSP よりも HTML ドキュメントの動作に問題があります。HTML は画像を直接埋め込まないことを理解する必要があります。代わりに、<img>
タグを使用して、さまざまな URL でホストされている画像を参照します。
データベースに保存されている画像を HTML ページに表示するには、画像の要求を処理できる別のサーブレットが必要になります。JSP は、次のような HTML ドキュメントをレンダリングする必要があります。
<html>
<head>
...
</head>
<body>
...
<img src="www.mydomain.com/images/1234.png" />
...
</body>
</html>
次に、/images へのすべてのリクエストを処理する別のサーブレットを作成します。このサーブレットは、データベース呼び出しを行い、取得した BLOB から生のバイトを応答の出力ストリームに送信します。使用している画像エンコーディングに基づいて、Content-Type ヘッダーも正しく設定してください。
画像をリクエスタに送り返すには、2 つのオプションのいずれかがあります。ブロブのバイトを配列として取得し、それを OutputStream に書き込むことができます (例: out.write(blob.getBytes(0,blob.length());
)。または、このメソッドを使用して、getBinaryStream()
バイトを InputStream から OutputStream にコピーすることもできます。その例を次に示します。
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 の代わりにその文字列を使用します。
ブロブを文字列に変換する
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>