SSH(STRUTS2+SPRING+HIBERNATE)實現檔案上傳功能

雲驛站發表於2013-11-05

首先是上傳頁面(upload.jsp)

主要程式碼如下,其中檔案欄位按自己所需可以改,但在Action中也必須增減相應欄位來接受,

[java] view
plain
copy
  1. <s:form action=“fileUploadAction” method=“post” enctype=“multipart/form-data”>  
  2.     <s:file name=“upload” label=“檔名” />  
  3.     <s:textfield name=“author” label=“上傳者” />  
  4.     <s:textfield name=“description” label=“檔案描述” />  
  5.     <s:submit value=“上傳” />  
  6. </s:form>  

增加一個上傳檔案的上傳檔案功能的Action

[java] view
plain
copy
  1. package edu.bjtu.resource.action;  
  2. import com.opensymphony.xwork2.ActionSupport;  
  3. import edu.bjtu.resource.service.ResourceService;  
  4. import java.io.File;  
  5. import java.io.FileInputStream;  
  6. import java.io.FileOutputStream;  
  7. import java.io.InputStream;  
  8. import java.io.OutputStream;  
  9. import java.util.Date;  
  10.    
  11. /** 
  12. * 
  13. * @author yilee 
  14. */  
  15. public class FileUploadAction extends ActionSupport {  
  16.    
  17.     private static final long serialVersionUID = 1L;  
  18.     // 代表上傳檔案的File物件  
  19.     private File upload;  
  20.     // 上傳檔名  
  21.     private String uploadFileName;  
  22.     // 上傳檔案的MIME型別  
  23.     private String uploadContentType;  
  24.     // 上傳檔案的描述資訊  
  25.     private String description;  
  26.     // 儲存上傳檔案的目錄,相對於WEB應用程式的根路徑,在struts.xml中配置  
  27.     private String uploadDir;  
  28.     //作者  
  29.     private String author;  
  30.     //日期  
  31.     private Date date;  
  32.     //  
  33.     private ResourceService resourceService;  
  34.     //儲存結果  
  35.     private String result;  
  36.    
  37.     //省略Getter和Setter方法  
  38.     @Override  
  39.     public String execute() throws Exception {  
  40.    
  41.         // 得到儲存上傳檔案的目錄的真實路徑  
  42.         File dir = new File(“C:\upload”);  
  43.         // 如果該目錄不存在,就建立  
  44.         if (!dir.exists()) {  
  45.             dir.mkdirs();  
  46.         }  
  47.    
  48.         int pos = uploadFileName.lastIndexOf(“.”);  
  49.         uploadContentType = uploadFileName.substring(pos + 1);//檔案字尾名  
  50.    
  51.         date = new Date();//當前日期  
  52.    
  53.         InputStream is = new FileInputStream(upload);  
  54.         OutputStream os = new FileOutputStream(new File(dir, uploadFileName));  
  55.         byte[] buf = new byte[1024];  
  56.         int len = –1;  
  57.         while ((len = is.read(buf)) != –1) {  
  58.             os.write(buf, 0, len);  
  59.         }  
  60.         is.close();  
  61.         os.close();  
  62.    
  63.         setUploadDir(“C:\upload”);//儲存路徑  
  64.    
  65.         if (resourceService.saveFile(uploadFileName, uploadDir, author, description, date)) {  
  66.             result = “{suc:1, msg:’上傳成功!’}”;  
  67.         } else {  
  68.             result = “{suc:0, msg:’上傳失敗!’}”;  
  69.         }  
  70.         return SUCCESS;  
  71.     }  
  72. }  


Service層

核心方法

[java] view
plain
copy
  1. public class ResourceServiceImpl implements ResourceService {  
  2.     private ResourceDao resourceDao;  
  3.     //省略Getter和Setter方法  
  4.     public boolean saveFile(String fileName, String fileDir, String author, String description, Date date) {  
  5.         if (resourceDao.save(fileName, fileDir, author, description, date)) {  
  6.             return true;  
  7.         } else {  
  8.             return false;  
  9.         }  
  10.     }  
  11. }  

運算元據庫,Dao層

[java] view
plain
copy
  1. public class ResourceDaoImpl extends HibernateDaoSupport implements ResourceDao {  
  2.     public boolean save(String fileName, String fileDir, String author, String description, Date date) {  
  3.         resource rs = new resource();  
  4.         rs.setAuthor(author);  
  5.         rs.setDescription(description);  
  6.         rs.setFileDir(fileDir);  
  7.         rs.setFileName(fileName);  
  8.         rs.setDate(date);  
  9.    
  10.         try {  
  11.             getHibernateTemplate().save(rs);  
  12.             return true;  
  13.         } catch (Exception e) {  
  14.             e.printStackTrace();  
  15.             return false;  
  16.         }  
  17.     }  
  18. }  

Model層 資原始檔resource.java

[java] view
plain
copy
  1. public class resource {  
  2.     private int id;  
  3.     private File doc;//文獻  
  4.     private String fileName;//名稱  
  5.     private String contentType;//型別  
  6.     private String fileDir;//路徑  
  7.     private Date date;//上傳日期  
  8.     private String author;//作者  
  9.     private String description;//註釋  
  10.     //按需新增屬性  
  11.     //省略Getter和Setter方法  
  12. }  

Hibernate對映檔案resource.hbm.xml

[java] view
plain
copy
  1. <?xml version=“1.0″ encoding=”UTF-8″?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC “-//Hibernate/Hibernate Mapping DTD 3.0//EN” “http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”>  
  3. <hibernate-mapping package=“edu.bjtu.resouce.model”>  
  4.     <class name=“edu.bjtu.resource.model.resource” table=“resource”>  
  5.         <id column=“resource_id” name=“id” type=“integer”>  
  6.             <generator class=“increment”/>  
  7.         </id>  
  8.         <property column=“fileName” name=“fileName” type=“string”/>  
  9.         <property column=“fileDir” name=“fileDir” type=“string”/>  
  10.         <property column=“author” name=“author” type=“string”/>  
  11.         <property column=“description” name=“description” type=“string”/>  
  12.         <property column=“date” name=“date” type=“date”/>  
  13.      </class>  
  14. </hibernate-mapping>  


Struts配置檔案

[java] view
plain
copy
  1. <?xml version=“1.0″ encoding=”UTF-8″ ?>  
  2. <!DOCTYPE struts PUBLIC  
  3. “-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”  
  4. “http://struts.apache.org/dtds/struts-2.0.dtd”>  
  5. <struts>  
  6.     <!– 上傳檔案的臨時目錄 –>  
  7.     <constant name=“struts.multipart.saveDir” value=“C:\x”></constant>  
  8.     <!– 上傳檔案的總大小限制 –>  
  9.     <constant name=“struts.multipart.maxSize” value=”102400000″></constant>  
  10.     <!– 資原始檔配置 –>  
  11.     <constant name=“struts.custom.i18n.resources”  
  12.               value=“ApplicationResources”>  
  13.     </constant>  
  14.     <package name=“file”  extends=“struts-default”>  
  15.         <action name=“fileUploadAction” class=“fileUploadAction”>  
  16.             <result name=“success”>/successUpload.jsp</result>  
  17.             <param name=“uploadDir”>/WEB-INF/UploadFiles</param>  
  18.         </action>  
  19.     </package>  
  20. </struts>  


Spring配置檔案

[java] view
plain
copy
  1. <?xml version=“1.0″ encoding=”UTF-8″?>  
  2. <!DOCTYPE beans PUBLIC “-//SPRING//DTD BEAN//EN” “/WEB-INF/dtd/spring-beans.dtd”>  
  3. <beans default-lazy-init=“true”>  
  4.     <bean id=“resourceDao” class=“edu.bjtu.resource.dao.impl.ResourceDaoImpl”>  
  5.         <property name=“sessionFactory” ref=“sessionFactory”></property>  
  6.     </bean>  
  7.    
  8.     <bean id=“resourceService” parent=“transactionProxy”>  
  9.         <property name=“target”>  
  10.             <bean class=“edu.bjtu.resource.service.impl.ResourceServiceImpl”>  
  11.                 <property name=“resourceDao”>  
  12.                     <ref local=“resourceDao”/>  
  13.                 </property>  
  14.             </bean>  
  15.         </property>  
  16.     </bean>  
  17.    
  18.     <bean id=“fileUploadAction” class=“edu.bjtu.resource.action.FileUploadAction” lazy-init=“false”>  
  19.         <property name=“resourceService”>  
  20.             <ref local=“resourceService”/>  
  21.         </property>  
  22.     </bean>  
  23. </beans>  

上傳成功後頁面, successUpload.jsp 核心程式碼

[java] view
plain
copy
  1. <h1>上傳成功</h1>  
  2. 檔名:<s:property value=“uploadFileName” /><br/>  
  3. 檔案大小:<s:property value=“upload.length()” /><br/>  
  4. 檔案型別:<s:property value=“uploadContentType” /><br/>  
  5. 上傳者 : <s:property value=“author” /><br/>  
  6. 檔案描述:<s:property value=“description” /><br/>  

當然,肯定還需要加各種攔截器,在Struts中,任何Action都需要攔截器.這一檔案上傳模組中必須新建攔截器,以驗證是否登入,驗證許可權等功能,這裡省略攔截器.關於攔截器的詳細使用,也許過幾天會詳細描述.


相關文章