图片的保存和显示
引言: 前段时间公司要求做一个图片上传并且还要展现的功能,之前对于图片文件的操作了解的很少,后来去网上找了很多资料,发现大多数是在数据库存放照片的地址,但是不幸的是,我的要求是将图片二进制存到数据库中去。最终,在网上找了几天,总算是小有成果。不多说了,直接上代码:
首先对于将图片的二进制保存到数据库中其实代码并不复杂,代码如下:(我使用的是mysql)
上传图片jsp代码:
<input type="file" name="myFilePic" id="sResumePic"
οnkeydοwn="event.returnValue=false"
style="background-color: #fff; border: solid 1px #77abc4; font-size: 12px; color: #000000" />
保存图片到数据库对于的action代码:(SSH)
InputStream is = new FileInputStream(myFilePic);
picture = (Blob) Hibernate.createBlob(is);
tableStaff.setPhoto(picture);
代码解释:
tableStaff 是hibernate文件对应的表名,photo是这张表的一个字段(不用多说了,我想大家一看着几行代码就能够明白了)。有了这两部分的代码那么图片就可以顺利的保存到数据库对应的表中了,那么如何将保存的图片信息显示在页面呢?接下来请看:
显示图片的jsp代码:
<image id="image" src="${pageContext.request.contextPath }/staffManage/pictureInfo!showPic.do?"
width="15" height="18" />
从代码中就能很明显的看出来,就是将image标签的src属性的值写成对应的展现图片的方法就可以了,下面我们看看这个对应的方法:
public void showPic() throws Exception {
BufferedInputStream imageStream = null;
//通过特定的条件找到对应的图片信息,将其变成一个输入流
Tablestaff userInfo = (Tablestaff) this.commonService.get(
Tablestaff.class, staffId);
imageStream = new BufferedInputStream(userInfo.getPhoto()
.getBinaryStream());
Blob blob = (Blob) userInfo.getPhoto();
long size = blob.length();
byte[] bs = blob.getBytes(1, (int) size);
this.getResponse().setContentType("image/jpeg;charset=GB2312");
this.getResponse().setHeader("Content-Transfer-Encoding", "base64");
OutputStream out = this.getResponse().getOutputStream();
BufferedOutputStream bos = null;
bos = new BufferedOutputStream(out);
//将图片信息写入到输出流
bos.write(bs, 0, bs.length);
bos.flush();
bos.close();
}
有了这样两部分代码,保存到数据库的图片信息就可以很好的显示在对应的页面上了。这样就完成了对图片的保存和显示。
代码比较简单,不知对大家是否有帮助,但对于我个人而言是种提高。我是个java爱好者,但是对于java了解的其实并不是很多,这是我博客发表的第一篇文章,希望是个好的开始,在今后的工作中我会把我所学到的知识放在我的博客里面和大家一起分享,共同学习,共同进步。交换苹果也许我得到的还是一个苹果,但是交换思想我却能拥有两种思想!!!