Struts2文件的上传

简介: 一、单文件的上传  表单的enctype属性:            application/x-www-form-urlencoded:默认的编码方式。            multipart/form-data:会以二进制的方式处理表单数据,会将文件域指定文件的内容也封装到请求参数里。

一、单文件的上传 

表单的enctype属性:

            application/x-www-form-urlencoded:默认的编码方式。

            multipart/form-data:会以二进制的方式处理表单数据,会将文件域指定文件的内容也封装到请求参数里。

            text/plain:当action属性是mailto:URL的形式方便。

     常用的上传框架是Common-FileUpload和COS,默认是Common-FileUpload,一旦框架获得了文件域对应的文件内容,我们就可以通过IO流将文件内容写入服务器的任意位置,从而完成文件上传。

     可以通过struts.properties配置文件中,修改默认值:struts.multipart.parser=jakarta

1、处理上传文件的jsp页面

   upload.jsp

  1: <%@ page language="java" contentType="text/html; charset=UTF-8"
  2:     pageEncoding="UTF-8"%>
  3: <%@ page import="java.util.*" %>
  4: <%@ taglib prefix="s" uri="/struts-tags" %>
  5: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  6: <html>
  7: <%  
  8: String path = request.getContextPath();  
  9: String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
 10: %> 
 11: <head>
 12:     <base href="<%=basePath%>">
 13:     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 14:     <title>Struts2文件上传</title>
 15: </head>
 16: <body>  
 17:       <h1>Struts 2完成上传</h1>       
 18:       <form action="upload.action" method="post" enctype="multipart/form-data">  
 19:         <div style="color:red"><s:fielderror/> </div>
 20:         <table>  
 21:             <tr>  
 22:                 <td>用户名:</td>  
 23:                 <td><input type="text" name="username" ></td>  
 24:             </tr>  
 25:             <tr>  
 26:                 <td>上传文件:</td>  
 27:                 <td><input type="file" name="myFile"></td>  
 28:             </tr>  
 29:             <tr>  
 30:                 <td><input type="submit" value="上传"></td>  
 31:                 <td><input type="reset"></td>  
 32:             </tr>  
 33:         </table>  
 34:       </form>  
 35:   </center>  
 36: </body>
 37: </html>

2、UploadAction.java

  1: package cc.openhome;
  2: import java.io.File;
  3: import java.io.FileInputStream;
  4: import java.io.FileOutputStream;
  5: import java.io.InputStream;
  6: import java.io.OutputStream;
  7: import org.apache.struts2.ServletActionContext;
  8: import com.opensymphony.xwork2.ActionSupport;
  9: public class UploadAction extends ActionSupport {
 10:   // username属性用来封装用户名
 11:   private String username;
 12:   
 13:   // myFile属性用来封装上传的文件
 14:   private File myFile;
 15: 
 16:   // myFileContentType属性用来封装上传文件的类型
 17:   private String myFileContentType;
 18: 
 19:   // myFileFileName属性用来封装上传文件的文件名
 20:   private String myFileFileName;
 21: 
 22:   
 23:   //获得username值
 24:   public String getUsername() {
 25:     return username;
 26:   }
 27: 
 28:   //设置username值
 29:   public void setUsername(String username) {
 30:     this.username = username;
 31:   }
 32: 
 33:   //获得myFile值
 34:   public File getMyFile() {
 35:     return myFile;
 36:   }
 37: 
 38:   //设置myFile值
 39:   public void setMyFile(File myFile) {
 40:     this.myFile = myFile;
 41:   }
 42: 
 43:   //获得myFileContentType值
 44:   public String getMyFileContentType() {
 45:     return myFileContentType;
 46:   }
 47: 
 48:   //设置myFileContentType值
 49:   public void setMyFileContentType(String myFileContentType) {
 50:     this.myFileContentType = myFileContentType;
 51:   }
 52: 
 53:   //获得myFileFileName值
 54:   public String getMyFileFileName() {
 55:     return myFileFileName;
 56:   }
 57: 
 58:   //设置myFileFileName值
 59:   public void setMyFileFileName(String myFileFileName) {
 60:     this.myFileFileName = myFileFileName;
 61:   }
 62: 
 63:   public String execute() throws Exception {
 64:     
 65:     //基于myFile创建一个文件输入流
 66:     InputStream is = new FileInputStream(myFile);
 67:     
 68:     // 设置上传文件目录
 69:     String uploadPath = ServletActionContext.getServletContext()
 70:         .getRealPath("/upload");
 71:     
 72:     // 设置目标文件
 73:     File toFile = new File(uploadPath, this.getMyFileFileName());
 74:     
 75:     // 创建一个输出流
 76:     OutputStream os = new FileOutputStream(toFile);
 77: 
 78:     //设置缓存
 79:     byte[] buffer = new byte[1024*1024];
 80: 
 81:     int length = 0;
 82: 
 83:     //读取myFile文件输出到toFile文件中
 84:     while ((length = is.read(buffer)) > 0) {
 85:       os.write(buffer, 0, length);
 86:     }
 87:     //关闭输入流
 88:     is.close();    
 89:     //关闭输出流
 90:     os.close();  
 91:     return SUCCESS;
 92:   }
 93: }
 94: 
 95: 

    3、配置struts.xml

  1: <?xml version="1.0" encoding="UTF-8" ?>
  2: <!DOCTYPE struts PUBLIC
  3:   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4:   "http://struts.apache.org/dtds/struts-2.3.dtd">
  5: 
  6: <struts> 
  7:   <constant name="struts.custom.i18n.resources" value="messageResource"></constant>
  8:   <package name="openhome" extends="struts-default">    
  9:     <action name="upload" class="cc.openhome.UploadAction">
 10:       <interceptor-ref name="fileUpload">
 11:         <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
 12:         <param name="maximumSize">2000</param>
 13:       </interceptor-ref>
 14:       <interceptor-ref name="defaultStack" />
 15:       <result name="success">/WEB-INF/page/succ.jsp</result>
 16:       <result name="input">/upload.jsp</result>
 17:     </action>
 18:   </package>
 19:     <!-- Add packages here -->
 20: </struts>
 21:   

    4、succ.jsp

  1: <%@ page language="java" contentType="text/html; charset=UTF-8"
  2:     pageEncoding="UTF-8"%>
  3: <%@ taglib prefix="s" uri="/struts-tags" %>
  4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5: <html>
  6: <head>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8:     <title>Insert title here</title>
  9: </head>
 10: <body>
 11:     上传成功!<br>
 12:     上传用户:${username}<br>
 13:     文件标题:${ myFileFileName }<br>
 14:     文件类型:${ myFileContentType }<br>
 15:     文件为:<br><img src="<s:property value="'upload/'+myFileFileName"/>"/>
 16: </body>
 17: </html>

     5、运行结果

          此时,上传文件必须满足:大小小于2000kb,而且是图片文件。

2016-12-04_20-45-33     

2016-12-04_21-07-22 2016-12-04_21-09-11

二、多文件的上传

    1、uploadmany.jsp

  1: <%@ page language="java" contentType="text/html; charset=UTF-8"
  2:     pageEncoding="UTF-8"%>
  3: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4: <html>
  5: <head>
  6:   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  7:   <title>数组多文件上传</title>
  8: </head>
  9: <body>
 10:   <form action="upload.action" method="post" enctype="multipart/form-data">
 11:     上传用户:<input type="text" name="username" /><br>
 12:     选择第一个文件:<input type="file" name="myFile" /><br>
 13:     选择第二个文件:<input type="file" name="myFile" /><br>
 14:     选择第三个文件:<input type="file" name="myFile" /><br>
 15:     <input type="submit" value="上传">
 16:         <input type="reset">
 17:   </form>
 18: </body>
 19: </html>

    2、UploadAction.jsp

  1: package cc.openhome;
  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: import org.apache.struts2.ServletActionContext;
 10: import com.opensymphony.xwork2.ActionSupport;
 11: public class UploadAction extends ActionSupport {
 12:   // username属性用来封装用户名
 13:   private String username;
 14:   
 15:   // myFile属性用来封装上传的文件
 16:   //private File[] myFile;
 17:   private List<File> myFile;
 18:   
 19:   // myFileContentType属性用来封装上传文件的类型
 20:   private List<String> myFileContentType;
 21: 
 22:   // myFileFileName属性用来封装上传文件的文件名
 23:   private List<String> myFileFileName;
 24: 
 25:   //定义所有Action允许上传的类型
 26:   private String allowTypes;    
 27:   
 28:   public String getAllowTypes() {
 29:     return allowTypes;
 30:   }
 31: 
 32:   public void setAllowTypes(String allowTypes) {
 33:     this.allowTypes = allowTypes;
 34:   }
 35: 
 36:   //获得username值
 37:   public String getUsername() {
 38:     return username;
 39:   }
 40: 
 41:   //设置username值
 42:   public void setUsername(String username) {
 43:     this.username = username;
 44:   }
 45: 
 46:   //获得myFile值
 47:   public List<File> getMyFile() {
 48:     return myFile;
 49:   }
 50: 
 51:   //设置myFile值
 52:   public void setMyFile(List<File> myFile) {
 53:     this.myFile = myFile;
 54:   }
 55: 
 56:   //获得myFileContentType值
 57:   public List<String> getMyFileContentType() {
 58:     return myFileContentType;
 59:   }
 60: 
 61:   //设置myFileContentType值
 62:   public void setMyFileContentType(List<String> myFileContentType) {
 63:     this.myFileContentType = myFileContentType;
 64:   }
 65: 
 66:   //获得myFileFileName值
 67:   public List<String> getMyFileFileName() {
 68:     return myFileFileName;
 69:   }
 70: 
 71:   //设置myFileFileName值
 72:   public void setMyFileFileName(List<String> myFileFileName) {
 73:     this.myFileFileName = myFileFileName;
 74:   }
 75:   public String execute() throws Exception {
 76:     List<File> files=getMyFile();
 77:     for(int i=0;i<files.size();i++){
 78:       //基于myFile创建一个文件输入流
 79:       InputStream is = new FileInputStream(files.get(i));
 80:       
 81:       // 设置上传文件目录
 82:       String uploadPath = ServletActionContext.getServletContext()
 83:           .getRealPath("/upload");
 84:       // 设置目标文件
 85:       //File[] toFile = new File(uploadPath, this.getMyFileFileName());
 86:       File toFile = new File(uploadPath, this.getMyFileFileName().get(i));
 87:       // 创建一个输出流
 88:       OutputStream os = new FileOutputStream(toFile);
 89: 
 90:       //设置缓存
 91:       byte[] buffer = new byte[1024*1024];
 92: 
 93:       int length = 0;
 94: 
 95:       //读取myFile文件输出到toFile文件中
 96:       while ((length = is.read(buffer)) > 0) {
 97:         os.write(buffer, 0, length);
 98:       }
 99:       //关闭输入流
100:       is.close();
101:       
102:       //关闭输出流
103:       os.close();
104:     }      
105:     return SUCCESS;
106:   }
107: }
108: 
109: 
110: 

    3、struts.xml

  1: <?xml version="1.0" encoding="UTF-8" ?>
  2: <!DOCTYPE struts PUBLIC
  3:   "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
  4:   "http://struts.apache.org/dtds/struts-2.3.dtd">
  5: 
  6: <struts> 
  7:   <package name="sturts"  extends="struts-default">
  8:       <action name="upload" class="cc.openhome.UploadAction">           
  9:           <interceptor-ref name="fileUpload">
 10:             <!-- 用于规定只能上传的文件类型 --> 
 11:         <param name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>
 12:         <param name="maximumSize">20000000</param>
 13:       </interceptor-ref>
 14:       <interceptor-ref name="defaultStack" />      
 15:             <result name="success">/succ.jsp</result>  
 16:             <result name="input">/upload.jsp</result>  
 17:         </action>
 18:   </package>
 19: </struts>

    4、succ.jsp

  1: <%@ page language="java" contentType="text/html; charset=UTF-8"
  2:     pageEncoding="UTF-8"%>
  3: <%@ taglib prefix="s" uri="/struts-tags" %>
  4: <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  5: <html>
  6:   <head>
  7:     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8:     <title>图片显示</title>
  9:   </head>
 10:   <body>
 11:     <h2>上传成功!</h2>
 12:     上传用户:${ username }<hr><br>
 13:     第一个文件名:${ myFileFileName[0] }<br>
 14:     第一个文件类型:${ myFileContentType[0] }<br>
 15:     第一个文件为:<br><img src="<s:property value="'upload/'+myFileFileName[0]"/>"/><hr><br>
 16:     第二个文件名:${ myFileFileName[1] }<br>
 17:     第二个文件类型:${ myFileContentType[1] }<br>
 18:     第二个文件为:<br><img src="<s:property value="'upload/'+myFileFileName[1]"/>"/><hr><br>
 19:     第三个文件名:${ myFileFileName[2] }<br>
 20:     第三个文件类型:${ myFileContentType[2] }<br>
 21:     第三个文件为:<br><img src="<s:property value="'upload/'+myFileFileName[2]"/>"/><hr><br>  
 22:   </body>
 23: </html>

    5、运行结果

                        2016-12-04_21-42-35            2016-12-04_21-36-57

当神已无能为力,那便是魔渡众生
目录
相关文章
|
2月前
|
Java
Struts文件上传与下载详解_上传单个文件
Struts文件上传与下载详解_上传单个文件
10 0
|
2月前
|
Java
Struts文件上传与下载详解 _上传多个文件
Struts文件上传与下载详解 _上传多个文件
19 0
|
XML Java 数据格式
|
Web App开发 Java
Struts2文件的下载
1、下载登录页面download.jsp 1: 3: 4: 5: 6: 7: 8: 下载页面 9: 10: 11: 下载前的登录页面 12: 13: 14: ...
705 0