SSH(STRUTS2+SPRING+HIBERNATE)实现文件上传功能-阿里云开发者社区

开发者社区> 数据库> 正文

SSH(STRUTS2+SPRING+HIBERNATE)实现文件上传功能

简介: 首先是上传页面(upload.jsp) 主要代码如下,其中文件字段按自己所需可以改,但在Action中也必须增减相应字段来接受, [java] view plaincopy         ...

首先是上传页面(upload.jsp)

主要代码如下,其中文件字段按自己所需可以改,但在Action中也必须增减相应字段来接受,

[java] view plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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 plaincopy
  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都需要拦截器.这一文件上传模块中必须新建拦截器,以验证是否登录,验证权限等功能,这里省略拦截器.关于拦截器的详细使用,也许过几天会详细描述.

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章