如題, 在吃了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一下),設定一下允許 的最大值 ,才能上傳。