struts2+hibernate實(shí)現(xiàn)圖片的上傳和顯示
struts2+hibernate實(shí)現(xiàn)圖片的上傳和顯示
這里的上傳是指將圖片上傳到數(shù)據(jù)庫(kù),顯示是把多張數(shù)據(jù)庫(kù)的圖片顯示在一個(gè)jsp文件里。
bookImg為圖片上傳到本地對(duì)應(yīng)的File實(shí)例。
但是struts2沒(méi)有為img提供包裝的標(biāo)簽,怎么動(dòng)態(tài)的設(shè)置img的src呢?? 原來(lái)還可以這樣用~~~
圖片在數(shù)據(jù)庫(kù)里面用blob類型表示,在mysql里面blob能夠存儲(chǔ)的大小
類型 | 大小(單位:字節(jié)) |
TinyBlob | 最大 255 |
Blob | 最大 65K |
MediumBlob | 最大 16M |
LongBlob | 最大 4G |
數(shù)據(jù)是網(wǎng)上找的,不保證一定對(duì),做參考吧。
在hibernate中blob被映射成byte[],下面是例子
- public class Book implements java.io.Serializable {
- private String id;
- private BookChildKind bookChildKind;
- private BookKind bookKind;
- private String bookName;
- private int price;
- private String bookAuther;
- private String bookPublisher;
- private byte[] bookImg; //這個(gè)對(duì)應(yīng)數(shù)據(jù)庫(kù)blob類型的字段
- private Date buyTime;
- private int totalCount;
- private String bookDescribe;
- private int sellCount;
- }
上傳圖片到本地硬盤的過(guò)稱我之前的文章寫過(guò)了http://blog.csdn.net/zhiweiv/archive/2008/10/16/3085834.aspx,這里就不寫了。主要的是把數(shù)據(jù)存入到數(shù)據(jù)庫(kù)。
- byte buffer[]=new byte[(int)bookImg.length()];
- FileInputStream in=new FileInputStream(bookImg);
- in.read(buffer);
- book.setBookImg(buffer);
然后是將數(shù)據(jù)庫(kù)里面的圖片讀出來(lái)作為img的src顯示出來(lái),原理和以前那個(gè)struts2的圖形驗(yàn)證碼實(shí)現(xiàn)相同http://blog.csdn.net/zhiweiv/archive/2008/10/08/3035811.aspx。使用struts2的stream返回img的字節(jié)信息作為圖片的src,這里的問(wèn)題是一個(gè)頁(yè)面有很多圖片,有一個(gè)action提供返回指定id的數(shù)據(jù)庫(kù)記錄的圖片字節(jié)流
- public String getImg(){
- Book book=bookDao.get(id);
- inputStream=new ByteArrayInputStream(book.getBookImg());
- return "img";
- }
- <img src="mainPageAction!getImg.action?id=<s:property value="id"/>"/>
以前我一直不知道原來(lái)struts2的標(biāo)簽還可以這樣用的
posted @ 2009-04-23 15:48 nicky 閱讀(6174) | 評(píng)論 (2) | 編輯 收藏