spring+hibernate文件上傳并放入大字段怎么實(shí)現(xiàn)

本篇內(nèi)容介紹了“spring+hibernate文件上傳并放入大字段怎么實(shí)現(xiàn)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

創(chuàng)新互聯(lián)公司專業(yè)成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè),集網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、網(wǎng)站制作于一體,網(wǎng)站seo、網(wǎng)站優(yōu)化、網(wǎng)站營銷、軟文營銷等專業(yè)人才根據(jù)搜索規(guī)律編程設(shè)計(jì),讓網(wǎng)站在運(yùn)行后,在搜索中有好的表現(xiàn),專業(yè)設(shè)計(jì)制作為您帶來效益的網(wǎng)站!讓網(wǎng)站建設(shè)為您創(chuàng)造效益。

首先準(zhǔn)備SPRING 框架,HIBERNATE 框架,common-file_upload.jar包。

當(dāng)然了不能忘記數(shù)據(jù)庫JDBC驅(qū)動(dòng)的jar。這里是oracle 就用了class12.jar
這里采用了Oracle 數(shù)據(jù)庫,在webroot下建立一個(gè)fileupload目錄。以便放上傳來的文件。
等等。。
既然用了Srping 框架,那就要翻翻Srping 手冊(cè),他對(duì)文件上傳的支持。Spring 由內(nèi)置的multipart包中的插件對(duì)象
MultipartResovler 來完成的。Spring 提供MultipartResovler可以支持Commons FileUpload(http://jakarta.apache.org/commons/fileupload)
和Cos FileUpload(http://www.servlet.com/cos)所以剛開始還要準(zhǔn)備一個(gè)common-file_upload.jar。
缺省,Spring 是沒有multipart 處理。所以要用multipart處理需要在web應(yīng)用的上下文加上multipart 解析器。然后你的請(qǐng)求中包含multipart,在上下文
定義的MultipartResolver就會(huì)解析他,這樣,你請(qǐng)求中的multipart屬性就會(huì)像其他屬于一樣被處理。

請(qǐng)看下面:
<!--使用common-file_upload.jar的調(diào)用方法--&gt

<!--使用Cos FileUpload的調(diào)用方法

--&gt

       1048576   


       4096

所以,需要準(zhǔn)備cos.jar或者common-file_upload.jar。
接下來在一個(gè)表單中處理multipart;
這時(shí)候我們準(zhǔn)備一個(gè)代文件域的表單
file.jsp:

文件上傳:
     

 

文件注釋:
   

   


我們將上面的URL映射到控制器上,已經(jīng)處理bean 的控制器本身。

org.vincent.FileUploadBean
file.jsp

然后創(chuàng)建控制器和含有文件屬性的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();//到這步的時(shí)候Spring 已經(jīng)把文件傳到內(nèi)存當(dāng)中了。

// cast to multipart file so we can get additional information
 MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
 CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest
   .getFile("file");
               //判斷是否有文件被上傳,如果有,就把文件放入數(shù)據(jù)庫或者是服務(wù)器上的硬盤里。
 if (bytes.length!=0) {
                       String path = request.getRealPath("/fileupload/");
  File dirPath = new File(path);
  if (!dirPath.exists()) {
   dirPath.mkdirs();
  }
 /*
                      這是存放到BLOB大字段當(dāng)中。
  UpLoadPicPO po = new UpLoadPicPO();
  po.setFile(bytes);  //在這里就感覺輸入大字段就特別簡單了。
  po.save();
 */
                //以下是存放入服務(wù)器硬盤上。
                        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());
}
}

如果只是存放在服務(wù)器硬盤上,那么到這一步算是結(jié)束了。但是如果你要放在BLOB大字段中,,繼續(xù)往下走。
(這里就不討論一些基本的HIBERNTAE配置和SPRING 配置。如有不明白去看這兩個(gè)的文檔)

創(chuàng)建一個(gè)uploadfile表映射。
表結(jié)構(gòu)如下
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字段處理的配置:
我們前面已經(jīng)指出Oracle的Lob字段和一般類型的字段在操作上有一個(gè)明顯的區(qū)別--那就是你必須首先通過Oracle的empty_blob()/empty_clob()初始化Lob字段,
然后獲取該字段的引用,通過這個(gè)引用更改其值。所以要完成對(duì)Lob字段的操作,Hibernate必須執(zhí)行兩步數(shù)據(jù)庫訪問操作,先Insert再Update。
使用BlobByteArrayType字段類型后,為什么我們就可以象一般的字段類型一樣操作Blob字段呢?可以確定的一點(diǎn)是:BlobByteArrayType不可能逾越Blob天生的操作方式,
原來是BlobByteArrayType數(shù)據(jù)類型本身具體數(shù)據(jù)訪問的功能,它通過LobHandler將兩次數(shù)據(jù)訪問的動(dòng)作隱藏起來,使Blob字段的操作在表現(xiàn)上和其他一般字段業(yè)類型無異,
所以LobHandler即是那個(gè)"苦了我一個(gè),幸福十億人"的那位幕后英雄。
LobHandler必須注入到Hibernate會(huì)話工廠sessionFactory中,因?yàn)閟essionFactory負(fù)責(zé)產(chǎn)生與數(shù)據(jù)庫交互的Session。LobHandler的配置如代碼

 
 /WEB-INF/classes/config/hibernate_oa.cfg.xml


<!--
    這里我采用了c3p0為連接池。如果是其他的還可以選擇。
如果是用dataSource則使用。
   
或則還有其他的連接池,等等。
--&gt

這樣配置好以后,就能在UploadFileCtrl.java里就能去掉/*  */,就這么簡單。。方便吧。。哈哈哈?。?!

要從大字段里做下載也很簡單啊??聪旅娲a。

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文件上傳并放入大字段怎么實(shí)現(xiàn)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

網(wǎng)站欄目:spring+hibernate文件上傳并放入大字段怎么實(shí)現(xiàn)
本文網(wǎng)址:http://www.muchs.cn/article40/ijsieo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App設(shè)計(jì)、響應(yīng)式網(wǎng)站、品牌網(wǎng)站制作微信小程序、域名注冊(cè)、關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設(shè)