使用Hibernate和Struts向資料庫中儲存、讀取並顯示圖片
最近做了一個小工具給朋友用,需要將圖片儲存到資料庫中,由於朋友只是在單機使用,也就是伺服器/客戶端是同一臺機器,所以就忽略檔案上傳部分,如果用在傳統B/S架構中,需要新增檔案上傳功能,否則會出錯,好了,下面總結一下具體步驟:
一、向資料庫中儲存圖片
在JSP頁面中新增檔案選擇控制元件:
照片:
<html:file property="picture" onchange="setPic()"></html:file>
<div id="pic" style="display: inline;">
<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="圖片格式錯誤" 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();
}
就是這麼簡單的兩居程式碼即可讀取圖片了。
相關文章
- java+pgsql實現儲存圖片到資料庫,以及讀取資料庫儲存的圖片JavaSQL資料庫
- 讀取mysq資料庫l資料,並使用dataview顯示資料庫View
- Excel 讀取圖片並獲取儲存路徑Excel
- 基於Hibernate的圖片資料庫儲存(mysql)資料庫MySql
- vb向資料庫中讀取單個圖片檔案資料庫
- c# winform下sql圖片二進位制儲存/讀取/顯示/寫入XML/讀取XML顯示C#ORMSQLXML
- struts + hibernate 資料集合如何顯示
- iOS儲存網路圖片和讀取本地沙盒圖片iOS
- 動態顯示資料庫圖片資料庫
- Android中呼叫攝像頭拍照儲存,並在相簿中選擇圖片顯示Android
- Silverlight中通過呼叫WebService來顯示資料庫中以流形式儲存的圖片Web資料庫
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- 使用Scrapy爬取圖片入庫,並儲存在本地
- 資料庫顯示圖片的問題資料庫
- 從資料庫中的表取幾張圖片,用flash形式動態的顯示圖片資料庫
- 爬取微博圖片資料存到Mysql中遇到的各種坑mysql儲存圖片爬取微博圖片MySql
- 微信小程式中base64圖片的顯示與儲存微信小程式
- 為什麼不用資料庫儲存圖片?資料庫
- 使用jpeg圖片庫,顯示圖片並簡單實現LCD的觸屏功能
- jquery使用ajax讀取後臺資料在表格中顯示jQuery
- sql 2k中的圖片儲存和獲取----引申到檔案儲存和獲取 (轉)SQL
- MATLAB學習之gif圖片讀取顯示Matlab
- Nodejs學習筆記-讀取顯示圖片NodeJS筆記
- php獲取遠端網站圖片並儲存本地PHP網站
- ,如何在 Illustrator 中預覽並儲存圖示?
- NOPI讀取Word模板並儲存
- 從庫中讀圖片顯示到頁面上的主要原始碼原始碼
- 用Qt5和OpenCV讀取顯示中文路徑的圖片QTOpenCV
- C# 截圖並儲存為圖片C#
- 為什莫從資料庫中取出的圖片不能顯示出來資料庫
- 在 SAP BTP Kyma Runtime 上使用 Redis 讀取和儲存資料Redis
- Android將view儲存為圖片並放在相簿中AndroidView
- Mybatis讀取和儲存json型別的資料MyBatisJSON型別
- 讀取和儲存Excel表Excel
- Redis資料儲存和讀寫Redis
- Java 讀取PDF中的文字和圖片Java
- asp.net 圖片批量上傳預覽,在Silverlight頁面中讀取並滾動顯示ASP.NET
- JSP中讀資料庫顯示為“??”怎麼辦?JS資料庫