JPA アノテーションを使用する場合、プロパティに次のようにアノテーションを付けることができます。@Lob
@Lob
private byte[] imagefile;
また、@Basic(fetch=FetchType.LAZY)
データのオーバーヘッドを回避するためにも使用できます。
ステファノ
- 編集
画像のバイナリ コンテンツを byte[] として保持したら、画像を表示する方法が 2 つあります。新しいサーブレットまたは新しいコントローラーを作成することです。前者は不必要に複雑になるため、通常は後者の方法を使用します。
最初に、コントローラーが応答するパスを選択する必要があります。仮定する"/dbresources/images/{id}"
コントローラーは次のようになります
@Controller
@RequestMapping(value = "/dbresources/images")
public class PictureImageController {
@Autowired
private PictureService pictureService; // a service to retrieve pictures fomr DB
// getters and setters
@RequestMapping(value = "/{id}")
public void writePicture(@PathVariable("id") String id, HttpServletRequest request, HttpServletResponse response) throws IOException {
try{
Picture img = pictureService.findById(id);
response.setContent(picture.getImagefile());
response.setContentLength(picture.getImagefile().length);
//additionally, you should add the mime-type and the last
//change date (to allow the browsers to use the cache) if these info are available
response.getOutputStream().write(picture.getImagefile());
response.setStatus(HttpServletResponse.SC_OK);
}
catch(Exception e){
response.setStatus(HttpServletResponse.SC_NOT_FOUND); // 404. Add specific catch for specific errors
}
}
次に、jsp(x) に次のように記述する必要があります。
<img src="/dbresources/images/[the id of the image to show]" />
コントローラはこのリクエストをインターセプトし、画像のバイナリ コンテンツを出力ストリームに書き込んで処理します。
これが十分に明確であることを願っています。また、その場で書いたので、コードの正確性を信頼しないでください。
ステファノ