0

我将图像插入 Mysql 数据库,图像将被存储。

File file = new File("G:/photos/New Folder (2)/www.geocities.com_cliknenjoy_lakshmimittal.jpg");

byte[] bFile = new byte[(int) file.length()];

try {

    FileInputStream fileInputStream = new FileInputStream(file);
    fileInputStream.read(bFile);
    fileInputStream.close();
} catch (Exception e) {
     e.printStackTrace();

}
inpatient.setImagefile(bFile);

我在 mysql 中使用 blob 数据类型。

private byte[] imagefile;

public byte[] getImagefile() {      
    return imagefile;   
}   

public void setImagefile(byte[] imagefile) { 
    this.imagefile = imagefile;     
}

现在我无法从 mysqldatabase 打开图像文件,我该如何打开这个?

4

1 回答 1

0

如果您使用 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]" />

控制器将拦截此请求并处理它,将图像的二进制内容写入输出流。

希望这足够清楚。并且不要相信代码的正确性,因为我是即时编写的。

斯特凡诺

于 2013-03-27T16:06:10.293 回答