如果您使用 JPA 注释,则可以将您的属性注释为@Lob
@Lob
private byte[] imagefile;
也许还@Basic(fetch=FetchType.LAZY)
可以避免数据开销。
斯特凡诺
- 编辑
将图像二进制内容保存为 byte[] 后,您有两种显示图像的方法:编写新的 servlet 或新的控制器。第一种增加了不必要的复杂性,所以我通常使用第二种方法。
首先,您必须选择控制器将响应的路径;认为"/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]" />
控制器将拦截此请求并处理它,将图像的二进制内容写入输出流。
希望这足够清楚。并且不要相信代码的正确性,因为我是即时编写的。
斯特凡诺