读书人

hibernate跟oracle关于图片的存储和读

发布时间: 2012-11-08 08:48:11 作者: rapoo

hibernate和oracle关于图片的存储和读取

1:在applicationContext-*.xml的配置文件中

?<bean? id="nativeJdbcExtractor"? />
?<bean id="oracleLobHandler" >
??<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"></property>
?</bean>

?
<bean id="lobHandler" lazy-init="true" />
???? </property>
?</bean>

加入这个属性

? <property name="lobHandler">
????????? <ref bean="oracleLobHandler" />
???? </property>
3:配置实体的hibernate的*.hbm.xml

?

?? <property name="person18" type="org.springframework.orm.hibernate3.support.BlobByteArrayType" length="1048576000">
??????????? <column name="PERSON18" />
??????? </property>

这个type是关键

?

在实体的 PERSON18 属性 的类型是byte[] ,配置基本结束

4:怎样存储呢?

这里是struts2+hibernate+spring 架构

?

在action中 private File[] upload; 这个upload其实就是jsp页面的上传<input type="file" name="upload"

在提交的时候 action中 开始把上传的图片set到实体的相关属性中去

?InputStream in = null;

?

?in = new BufferedInputStream(new FileInputStream(this.getUpload()[0]), BUFFER_SIZE);
????????????????? byte[] buffer = new byte[BUFFER_SIZE];
????????????????? in.read(buffer);

//把上传的图片set到 实体中去
????????????????? person.setPerson18(buffer);

最好直接save实体就可以了

?

5:读取显示在页面

本人最初的想法是在action中把对象查出来,也就可以得到保存图片的byte[]?,然后放到request中,在页面直接读取,结果失败,

?

最后的解决办法是

jsp页面:

<img id="imgShow" width="100%" height="100%" src="imageAction.action?person01=${mk.person01}" alt="hibernate跟oracle关于图片的存储和读取" />?

?后台action中

public String loadImage() throws Exception{
??InputStream fileInput = null;
??String person01 = request.getParameter("person01");
??File dir = new File(ServletActionContext.getServletContext().getRealPath("")+? "/1.jpg");
??Person p = super.getPersonService().getPersonById(Integer.parseInt(person01));
??byte[] bs = p.getPerson18();
??
??if(bs == null){
??? fileInput = new BufferedInputStream(new FileInputStream(dir), 100*1024);
???byte[] buffer = new byte[100*1024];
???int i = fileInput.read(buffer);
???upLoadImg(buffer);
????? fileInput.close();
??}else{
???upLoadImg(bs);
??}
??????? return null;

?

?

?

?

/**
? * 上传图片
? * @param bs
? */
public void upLoadImg(byte[] bs){
?
?ServletOutputStream out = null;
??? InputStream in = null;
??? InputStream in2 = null;
??? try {
???????? //二进制输出流
???????? response.setContentType("image/jpeg");
????????
???????? //得到输出流
???????? out = response.getOutputStream();
??????? in =? new java.io.ByteArrayInputStream(bs);
???????? //强制刷新输出流
??????? out.write(bs);
??????? out.flush();
??? } catch ( IOException e ) {
???????? e.printStackTrace();
??? } catch ( Exception e ) {
???????? e.printStackTrace();
??? } finally {
???????? if ( in != null ) {
????????????? try {
?????????????????? in.close();
????????????? } catch ( IOException e ) {
?????????????????? e.printStackTrace();
????????????? }
???????? }
???????? if ( out != null ) try {
????????????? out.close();
???????? } catch ( IOException e ) {
????????????? e.printStackTrace();
???????? }
??? }
}

?

这样就可以了

如有疑问:qq 331887602 最好发邮件哈 有现成的项目实例

?

转自:http://mamaoyuan625.iteye.com/blog/807451

读书人网 >软件架构设计

热点推荐