如题, 在吃了NN多的亏以后,决心写下本文,小总结下图片上传的经验,可能类型不太正确,相信大家都懂的,写一下思路而已。
以前用Struts1.X做过图片上传,用的是FormFile封装页面传过来的文件参数,而且Struts2.X用的是File类型 的,还可以封装文件名fileName和fileContentType文件类型(好像不是这个属性,跟这个差不多的),在Action里面封装好数据就行了,然后在Dao层处理一下,这里有一点区别:
(假设数据库字段名为:PHOTO, POJO对象的属性名为:photo,Action封装文件的属性名为:photoFile)
1:Oracle数据库:
POJO对象的属性设置 成Blob类型,然后利用
FileinputStream fileinputstream=new FileinputStream(photoFile);
Hibernate.createBlob(fileinputStream);
这个方法返回一个Blob类型的数据, 在hibernate的映射文件里面<property name="photo" column="PHOTO" />就行了,如果有问题,就再加上类型type 属性,然后调用 getHibernateTemplate().save()就行了。
2.mySql数据库:
需要修改一下的是POJO的属性了,这里不用Blob类型了,改用byte[] 这种类型,
byte[] fileBytes=null;
FileinputStream fileinputstream=new FileinputStream(photoFile);
fileBytes=new byte[fileinputstream.avaliable()];
fileinputstream.read(filebytes);
fileinputstream.close();
采用二进制保存图片,然后hibernate映射文件修改成
<property name="photo" column="PHOTO" type="binary" /> 这个,然后再调用 getHibernateTemplate.save()方法就行了。除些以外的,不用作修改 与oracle一样。(至少我的是这样的,成功 了)。
注意:Struts对于文件上传有大小限制 ,默认好像最大是2M多一点点(可以更改struts的配置),而mysql也是如此的,如果是大文件 的话,一个方面不建议直接保存在数据库,另一方面,必须要先修改一下mysql的配置文件 my.ini,添加一个max_allowed_packet(貌似是这样,自己google一下),设置一下允许 的最大值 ,才能上传。