【Struts2】单文件、多文件上传

来源:互联网 发布:舍伍德算法 ppt 编辑:程序博客网 时间:2024/05/16 14:43

转自:http://blog.csdn.net/itwit/article/details/7031785

环境:Myeclipse

前提:为Web项目添加Struts2支持后:


内容是struts2的文件上传汇总,包括单文件和多文件上传,记录下来,留作备份

Struts1实现文件上传的文章(http://blog.csdn.net/itwit/article/details/7031371)

1、单文件上传

1)JSP页面(simple.jsp)

[java] view plaincopy
  1. <%@ page language="java" pageEncoding="utf-8"%>  
  2. <%@taglib prefix = "s" uri = "/struts-tags"%>  
  3.   
  4. <html>  
  5.   <body>  
  6.     <H1><s:actionmessage/></H1>  
  7.     <s:form action = "simpleAction" enctype="multipart/form-data">  
  8.         <s:file name = "upload" label = "请输入要传入的文件名"></s:file>  
  9.         <s:submit value = "save"></s:submit>  
  10.     </s:form>  
  11.   </body>  
  12. </html>  


2)Action(SimpleUploadAction)

[java] view plaincopy
  1. package upload.singleUpload;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8.   
  9. import com.opensymphony.xwork2.ActionSupport;  
  10.   
  11. public class SimpleUploadAction extends ActionSupport {  
  12.   
  13.     /** 
  14.      *  
  15.      */  
  16.     private static final long serialVersionUID = 1L;  
  17.     private File upload;//上传的文件  
  18.     private String uploadFileName;//上传的文件名称  
  19.     private String uploadContentType;//上传的文件类型  
  20.   
  21.     @Override  
  22.     public String execute() throws Exception {  
  23.           
  24.         InputStream in = new FileInputStream(upload);  
  25.         OutputStream out = new FileOutputStream("d:\\"+uploadFileName);  
  26.         byte[] buffer = new byte[8192];  
  27.         int count = 0;  
  28.         while((count = in.read(buffer)) > 0){  
  29.             out.write(buffer,0,count);  
  30.         }  
  31.         out.close();  
  32.         in.close();  
  33.         this.addActionMessage("上传成功");  
  34.         return SUCCESS;  
  35.           
  36.     }  
  37.       
  38.     public File getUpload() {  
  39.         return upload;  
  40.     }  
  41.     public void setUpload(File upload) {  
  42.         this.upload = upload;  
  43.     }  
  44.     public String getUploadFileName() {  
  45.         return uploadFileName;  
  46.     }  
  47.     public void setUploadFileName(String uploadFileName) {  
  48.         this.uploadFileName = uploadFileName;  
  49.     }  
  50.     public String getUploadContentType() {  
  51.         return uploadContentType;  
  52.     }  
  53.     public void setUploadContentType(String uploadContentType) {  
  54.         this.uploadContentType = uploadContentType;  
  55.     }  
  56. }  

3)Struts配置文件(struts.xml)

[html] view plaincopy
  1. <action name="simpleAction" class = "upload.singleUpload.SimpleUploadAction">  
  2.    <result name = "success">/upload/simple/simple.jsp</result>  
  3.    <result name = "input">/upload/simple/simple.jsp</result>  
  4.  </action>  


2、多文件上传
1)JSP页面(mutity.jsp)

[java] view plaincopy
  1. <%@ page language="java" pageEncoding="utf-8"%>  
  2. <%@taglib prefix = "s" uri = "/struts-tags"%>  
  3.   
  4. <html>  
  5.   <head>  
  6.     <script language="javascript">  
  7.   
  8.         function addComponent()  
  9.         {  
  10.                 var uploadHTML = document.createElement( "<input type='file'  name='upload'/>");  
  11.                 document.getElementById("files").appendChild(uploadHTML);  
  12.                 uploadHTML = document.createElement( "<p/>");  
  13.                 document.getElementById("files").appendChild(uploadHTML);  
  14.         }  
  15.         </script>  
  16.       
  17.   </head>  
  18.   <body>  
  19.     <input type="button" onclick="addComponent();" value="添加文件" />  
  20.         <br />  
  21.         <form action="mutityUpload.action"  
  22.             method="post" enctype="multipart/form-data">  
  23.             <span id="files">   
  24.             <input type='file' name='upload' />  
  25.             </span>  
  26.             <input type="submit" value="上传" />  
  27.         </form>  
  28.   </body>  
  29. </html>  


2)Action(MutityUploadAction)

[java] view plaincopy
  1. package upload.mutityUpload;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.io.FileOutputStream;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8. import java.util.List;  
  9.   
  10. import com.opensymphony.xwork2.ActionSupport;  
  11.   
  12. public class MutityUploadAction extends ActionSupport {  
  13.   
  14.     /** 
  15.      *  
  16.      */  
  17.     private static final long serialVersionUID = 1L;  
  18.     private List<File> upload;  
  19.     private List<String> uploadFileName;  
  20.     private List<String> uploadContentType;  
  21.   
  22.     @Override  
  23.     public String execute() throws Exception {  
  24.           
  25.         for(int i = 0;upload != null && i<upload.size();i++){  
  26.             File file = upload.get(i);  
  27.             InputStream in = new FileInputStream(file);  
  28.             OutputStream out = new FileOutputStream("d:\\"+uploadFileName.get(i));  
  29.             byte[] buffer = new byte[8192];  
  30.             int count = 0;  
  31.             while((count = in.read(buffer)) > 0){  
  32.                 out.write(buffer,0,count);  
  33.             }  
  34.             out.close();  
  35.             in.close();  
  36.               
  37.         }  
  38.   
  39.         this.addActionMessage("上传成功");  
  40.         return SUCCESS;  
  41.           
  42.     }  
  43.       
  44.   
  45.     public List<File> getUpload() {  
  46.         return upload;  
  47.     }  
  48.   
  49.   
  50.     public void setUpload(List<File> upload) {  
  51.         this.upload = upload;  
  52.     }  
  53.   
  54.   
  55.     public List<String> getUploadFileName() {  
  56.         return uploadFileName;  
  57.     }  
  58.   
  59.   
  60.     public void setUploadFileName(List<String> uploadFileName) {  
  61.         this.uploadFileName = uploadFileName;  
  62.     }  
  63.   
  64.   
  65.     public List<String> getUploadContentType() {  
  66.         return uploadContentType;  
  67.     }  
  68.   
  69.   
  70.     public void setUploadContentType(List<String> uploadContentType) {  
  71.         this.uploadContentType = uploadContentType;  
  72.     }  
  73. }  

3)Struts配置文件(struts.xml)

[html] view plaincopy
  1. <action name="mutityUpload" class = "upload.mutityUpload.MutityUploadAction">  
  2.   <result name = "success">/upload/mutity/mutity.jsp</result>  
  3.   <result name = "input">/upload/mutity/mutity.jsp</result>  
  4. </action>  


 

 经过对struts1和2的文件上传学习,总结两者的区别为:

struts2中不需要再单独定义form,在action中可以定义action需要用到的属性

struts1文件上传使用的类是FileForm,struts2使用的类是File

 struts2较struts1降低了耦合度,却也增加了action的代码量,总体上来说是简洁了不少。

 


原创粉丝点击