首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

施用Hibernate和Struts向数据库中保存、读取并显示图片

2012-10-08 
使用Hibernate和Struts向数据库中保存、读取并显示图片? 最近做了一个小工具给朋友用,需要将图片保存到数据

使用Hibernate和Struts向数据库中保存、读取并显示图片

? 最近做了一个小工具给朋友用,需要将图片保存到数据库中,由于朋友只是在单机使用,也就是服务器/客户端是同一台机器,所以就忽略文件上传部分,如果用在传统B/S架构中,需要添加文件上传功能,否则会出错,好了,下面总结一下具体步骤:

一、向数据库中保存图片

? 在JSP页面中添加文件选择控件:

?

照片:<html:file  property="picture" onchange="setPic()"></html:file><div id="pic">     <img src="./images/defaultHead.jpg" height='95' width='70'/></div>

?

? 这个很简单,不必多说,div层中放的是一张默认图片,当用户选择了一张图片后则使用JS控制显示用户所选图片。

? 接着,在Struts的Action中处理图片:

?

public ActionForward addWorker(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {try {WorkerForm workerForm = (WorkerForm)form;String picture = workerForm.getPicture();//获取图片路径//封装工人对象Worker worker = new Worker();worker.setPicture(picture);//如果图片路径不为空,则读取图片if(null!=picture&&!"".equals(picture)){     InputStream image = new FileInputStream(picture);     worker.setImage(Hibernate.createBlob(image));}//调用业务逻辑,保存单位workerService.addWorker(worker);//转向工人列表return loadQueryWorker( mapping,  form, request,  response);} catch (Exception e) {e.printStackTrace();saveErrors(request, ExceptionUtils.dealException(e));return mapping.findForward("global.error");}}

??

?在Worker类中,有一个java.sql.Blob类型的属性image,用来存放图片信息:

?

public class Worker {     private Blob image;     public Blob getImage() {          return image;     }     public void setImage(Blob image) {          this.image = image;     }}

??

?Worker.hbm.xml映射文件中如下配置:

?

 <property name="image" type="java.sql.Blob">            <column name="PICTURE" length="100" /> </property>

???

数据库中PICTURE字段的类型为image。

?? 接下来直接调用WorkerDAO的方法保存对象即可:

?

public class WorkerDAO extends FoHibernateDaoSupport implements IWorkerDAO {public void addWorker(Worker worker) {this.getHibernateTemplate().save(worker);}}

??

这样,一张图片就以二进制形式存储到数据库中了

?

二、读取并显示图片

? 保存成功后,下面的工作就是如何从数据库中读取图片并显示到页面中了。

? 还是从页面开始,在页面中想要显示图片的地方添加如下代码:

?

<img title="" alt="施用Hibernate和Struts向数据库中保存、读取并显示图片" height='95' width='70' src='workerAction.do?method=showWorkerPicture&id=<bean:write name="worker" property="id"/>'/>

?这个图片标签的alt属性指定如果图片显示错误的提示信息,src属性指向了Struts的一个Action方法,下面就来看一下这个action:

?

                /** * 显示工人照片Action * @param mapping * @param form * @param request * @param response * @return */public ActionForward showWorkerPicture(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) {try {      WorkerForm workerForm = (WorkerForm)form;      String id = workerForm.getId();//得到工人编号    //调用业务逻辑,查询图片    Blob image = workerService.queryPicture(id);      int length = (int)image.length();//取得流中的可用字节总数       byte[] buf=image.getBytes(1,length);//获取Blob字节数组       response.setContentType("image/jpeg");         OutputStream toClient=response.getOutputStream();//获取输出流       for (int i = 0; i < buf.length; i++) {              toClient.write(buf[i]);//输出到页面       }           toClient.close();//关闭输出流       return null;} catch (Exception e) {e.printStackTrace();saveErrors(request, ExceptionUtils.dealException(e));return mapping.findForward("global.error");}}

?

?

? Action的方法中从数据库中读取了某一个Blob类型的图片并输出到页面中。下面再看一下DAO如何读取图片:

?

public Blob queryPicture(String id) {Worker worker = (Worker) this.getHibernateTemplate().get(Worker.class, id);return worker.getImage();}

?就是这么简单的两居代码即可读取图片了。

1 楼 xiaoying_honey 2011-09-14   不错,想要需求要做这个,学习了。

热点排行