Hibernateは、画像をデータベースに保存し、ページに表示する
12363 ワード
一般的には、画像をデータベースに保存することはお勧めしません.通常、画像をサーバのパスにアップロードし、データベースにパスを保存します.しかし、複数のプロジェクトが1つのデータベースを共有するなど、画像をデータベースに保存する必要がある場合があります.この場合、画像ファイルをデータベースにアップロードするしかありません.
Oracleデータベースでは、一般的にBlobフィールドを使用してバイナリ・ファイルを格納するため、画像をOracleデータベースに格納するには、画像フィールドがBlobである必要があります.同時にJavaのHibernateは非常に記憶メカニズムを提供し、この記憶メカニズムはバイナリBlobのサポートに非常に優れている.実装コードは次のとおりです.
このコードではまずFileをBlob(Java.sql.Blob)に変換し、Hibernateのsave()メソッドで保存します.この簡単なコードでは、Oracleデータベースに画像を格納できます.以下に、データを見て画像を取り出します.
もちろん、Hibernateによって画像の記憶や表示が容易に実現され、技術的な内容はありません.ここではただの記録的な役割を果たしている!!!
Oracleデータベースでは、一般的にBlobフィールドを使用してバイナリ・ファイルを格納するため、画像をOracleデータベースに格納するには、画像フィールドがBlobである必要があります.同時にJavaのHibernateは非常に記憶メカニズムを提供し、この記憶メカニズムはバイナリBlobのサポートに非常に優れている.実装コードは次のとおりです.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Blob blob = BlobUtils.file2Blob(file); // File blob
advertisement.setImage(blob);
//
dao.saveOrUpdate(advertisement);
public static Blob file2Blob(File file) throws IOException, SerialException, SQLException {
InputStream is = null;
Blob blob = null;
try {
is = new FileInputStream(file);
byte[] content = new byte[is.available()];
is.read(content);
blob = new SerialBlob(content);
} catch (IOException e) {
throw e;
}finally{
if(is != null){
is.close();
}
if(file != null){
file.delete();
}
}
return blob;
}
このコードではまずFileをBlob(Java.sql.Blob)に変換し、Hibernateのsave()メソッドで保存します.この簡単なコードでは、Oracleデータベースに画像を格納できます.以下に、データを見て画像を取り出します.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// -----servlet
Blob blob = advertisement.getImage();
int length = (int)blob.length(); //
byte[] buf = blob.getBytes(1,length); // Blob
response.setContentType("image/jpeg");
OutputStream out = response.getOutputStream();//
for (int i = 0; i < buf.length; i++) {
out.write(buf[i]);//
}
out.close();//
//
Blob blob = advertisement.getImage();
InputStream is = blob.getBinaryStream();
FileOutputStream fos = new FileOutputStream("D://advertisementImage.jpg");
byte[] buffer = new byte[1024];
int len = 0;
while((len = is.read(buffer) )!= -1){
fos.write(buffer,0,len);
}
System.out.println(" ");
is.close();
fos.close();
もちろん、Hibernateによって画像の記憶や表示が容易に実現され、技術的な内容はありません.ここではただの記録的な役割を果たしている!!!