zoukankan      html  css  js  c++  java
  • Struts2文件的上传

    一、单文件的上传 

    表单的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

  • 相关阅读:
    Nhibernate 在一个项目中连接不同的数据库。记录
    sql2005 向2000导入数据。一些注意事项
    iis发布系统问题总结 .....关于handler的重写的应用
    ExecutorService 线程池
    Spring Boot 访问静态资源
    spring boot的核心注解
    日期处理工具类
    Json解析工具类
    (技能篇)Mysql在linux下的全量热备份
    Linux相关命令
  • 原文地址:https://www.cnblogs.com/liuzhongfeng/p/6132048.html
Copyright © 2011-2022 走看看