本篇內容介紹了“spring+hibernate文件上傳并放入大字段怎么實現”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
創新互聯公司專業成都網站設計、網站建設、外貿網站建設,集網站策劃、網站設計、網站制作于一體,網站seo、網站優化、網站營銷、軟文營銷等專業人才根據搜索規律編程設計,讓網站在運行后,在搜索中有好的表現,專業設計制作為您帶來效益的網站!讓網站建設為您創造效益。
首先準備SPRING 框架,HIBERNATE 框架,common-file_upload.jar包。
當然了不能忘記數據庫JDBC驅動的jar。這里是oracle 就用了class12.jar
這里采用了Oracle 數據庫,在webroot下建立一個fileupload目錄。以便放上傳來的文件。
等等。。
既然用了Srping 框架,那就要翻翻Srping 手冊,他對文件上傳的支持。Spring 由內置的multipart包中的插件對象
MultipartResovler 來完成的。Spring 提供MultipartResovler可以支持Commons FileUpload(http://jakarta.apache.org/commons/fileupload)
和Cos FileUpload(http://www.servlet.com/cos)所以剛開始還要準備一個common-file_upload.jar。
缺省,Spring 是沒有multipart 處理。所以要用multipart處理需要在web應用的上下文加上multipart 解析器。然后你的請求中包含multipart,在上下文
定義的MultipartResolver就會解析他,這樣,你請求中的multipart屬性就會像其他屬于一樣被處理。
請看下面:
<!--使用common-file_upload.jar的調用方法-->
<!--使用Cos FileUpload的調用方法
-->
所以,需要準備cos.jar或者common-file_upload.jar。
接下來在一個表單中處理multipart;
這時候我們準備一個代文件域的表單
file.jsp:
我們將上面的URL映射到控制器上,已經處理bean 的控制器本身。
然后創建控制器和含有文件屬性的bean。
FileUploadBean.java
public class FileUploadBean {
private byte[] file;
public byte[] getFile() {
return file;
}
public void setFile(byte[] file) {
this.file = file;
}
}
UploadFileCtrl.java
public class UploadFileCtrl extends SimpleFormController {
protected ModelAndView onSubmit(HttpServletRequest request,
HttpServletResponse response, Object arg2, BindException arg3)
throws Exception {
// TODO Auto-generated method stub
FileUploadBean bean = (FileUploadBean) arg2;
byte[] bytes = bean.getFile();//到這步的時候Spring 已經把文件傳到內存當中了。
// cast to multipart file so we can get additional information
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest
.getFile("file");
//判斷是否有文件被上傳,如果有,就把文件放入數據庫或者是服務器上的硬盤里。
if (bytes.length!=0) {
String path = request.getRealPath("/fileupload/");
File dirPath = new File(path);
if (!dirPath.exists()) {
dirPath.mkdirs();
}
/*
這是存放到BLOB大字段當中。
UpLoadPicPO po = new UpLoadPicPO();
po.setFile(bytes); //在這里就感覺輸入大字段就特別簡單了。
po.save();
*/
//以下是存放入服務器硬盤上。
String filename=path+file.getName();
File uploadedFile = new File(filename);
FileCopyUtils.copy(bytes, uploadedFile);
System.out.println("********************************");
System.out.println(uploadedFile.getAbsolutePath());
System.out.println(bytes.length);
System.out.println("********************************");
}
return new ModelAndView("file.jsp");
}
protected void initBinder(HttpServletRequest request,
ServletRequestDataBinder binder) throws ServletException {
binder.registerCustomEditor(byte[].class,
new ByteArrayMultipartFileEditor());
}
}
如果只是存放在服務器硬盤上,那么到這一步算是結束了。但是如果你要放在BLOB大字段中,,繼續往下走。
(這里就不討論一些基本的HIBERNTAE配置和SPRING 配置。如有不明白去看這兩個的文檔)
創建一個uploadfile表映射。
表結構如下
uuid varchar2 32
file blob
uploadfile.hbm.xml:
PO文件如下:
UploadFilePO:
public class UpLoadPicPO extends AbstractPO{
private String id;
private byte[] file;
public byte[] getFile() {
return image;
}
public void setFile(byte[] file) {
this.file = file;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Lob字段處理的配置:
我們前面已經指出Oracle的Lob字段和一般類型的字段在操作上有一個明顯的區別--那就是你必須首先通過Oracle的empty_blob()/empty_clob()初始化Lob字段,
然后獲取該字段的引用,通過這個引用更改其值。所以要完成對Lob字段的操作,Hibernate必須執行兩步數據庫訪問操作,先Insert再Update。
使用BlobByteArrayType字段類型后,為什么我們就可以象一般的字段類型一樣操作Blob字段呢?可以確定的一點是:BlobByteArrayType不可能逾越Blob天生的操作方式,
原來是BlobByteArrayType數據類型本身具體數據訪問的功能,它通過LobHandler將兩次數據訪問的動作隱藏起來,使Blob字段的操作在表現上和其他一般字段業類型無異,
所以LobHandler即是那個"苦了我一個,幸福十億人"的那位幕后英雄。
LobHandler必須注入到Hibernate會話工廠sessionFactory中,因為sessionFactory負責產生與數據庫交互的Session。LobHandler的配置如代碼
<!--
這里我采用了c3p0為連接池。如果是其他的還可以選擇。
如果是用dataSource則使用。
或則還有其他的連接池,等等。
-->
這樣配置好以后,就能在UploadFileCtrl.java里就能去掉/* */,就這么簡單。。方便吧。。哈哈哈!!!
要從大字段里做下載也很簡單啊。看下面代碼。
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
response.setContentType("application/x-msdownload");
UpLoadPicPO po = (UpLoadPicPO)dao.get(UpLoadPicPO.class);//這里我只是簡略的寫了下,意思大家都明白。
byte[] bytes = po.getFile();
ServletOutputStream sos = response.getOutputStream();
sos.write(bytes);
sos.close();
return null;
}
“spring+hibernate文件上傳并放入大字段怎么實現”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注創新互聯網站,小編將為大家輸出更多高質量的實用文章!
網站欄目:spring+hibernate文件上傳并放入大字段怎么實現
本文網址:http://m.newbst.com/article40/ijsieo.html
成都網站建設公司_創新互聯,為您提供App設計、響應式網站、品牌網站制作、微信小程序、域名注冊、關鍵詞優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯