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

      struts2的文件上传是用拦截器实现的,我们可以不用去关心底层的实现,使得上传文件变得很简单。

      Action代码:

      

     1 package com.test;
     2 
     3 import java.io.File;
     4 import java.io.IOException;
     5 import java.text.SimpleDateFormat;
     6 import java.util.Date;
     7 import java.util.Random;
     8 
     9 import org.apache.commons.io.FileUtils;
    10 import org.apache.struts2.ServletActionContext;
    11 import com.opensymphony.xwork2.ActionSupport;
    12 
    13 
    14 /**
    15  * Action that file upload
    16  * @author Luxh
    17  */
    18 public class FileUploadAction extends ActionSupport{
    19     
    20     private static final long serialVersionUID = 1L;
    21     
    22     /**
    23      * 上传的文件
    24      *  该属性名称要和页面中的<input type="file" name="file">中的name一致
    25      */
    26     private File file;
    27     /**文件名*/
    28     private String fileFileName;
    29     /**文件类型*/
    30     private String fileContentType;
    31     
    32     
    33     /**
    34      * 上传文件
    35      * @return 
    36      * @throws IOException 
    37      */
    38     public String uploadFile() throws IOException {
    39         if(file != null) {
    40             //获取存放文件的目录
    41             String saveDir = ServletActionContext.getServletContext().getRealPath("D:/test/upload");
    42             File dirFile = new File(saveDir);
    43             //如果目录不存在,就创建目录
    44             if(!dirFile.exists()) {
    45                 dirFile.mkdir();
    46             }
    47             
    48             //获取目标文件名
    49             String targetFileName = generateFileName(fileFileName);
    50             //生成目标文件
    51             File targetFile = new File(saveDir,targetFileName);
    52             //复制文件到存放路径,FileUtils是apache旗下commons-io包中的一个工具类
    53        FileUtils.copyFile(file,targetFile);
    54             
    55             //实际中可能需要将一些文件信息保存到数据中,比如原始文件名称、文件大小、文件存放路径等信息
    56             //可调用相关的业务逻辑进行处理
    57         }
    58         return SUCCESS;
    59         
    60     }
    61     
    62     
    63     /**
    64      * 生成新文件名
    65      * @param fileName
    66      * @return
    67      */
    68     private String generateFileName(String fileName) {
    69         SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    70         String formatDate = sdf.format(new Date());
    71         int random = new Random().nextInt(1000);
    72         int position = fileName.lastIndexOf("."); 
    73         String extension = fileName.substring(position); 
    74         return formatDate + random + extension;     
    75     }
    76     
    77     
    78     public File getFile() {
    79         return file;
    80     }
    81     public void setFile(File file) {
    82         this.file = file;
    83     }
    84     public String getFileFileName() {
    85         return fileFileName;
    86     }
    87     public void setFileFileName(String fileFileName) {
    88         this.fileFileName = fileFileName;
    89     }
    90     public String getFileContentType() {
    91         return fileContentType;
    92     }
    93     public void setFileContentType(String fileContentType) {
    94         this.fileContentType = fileContentType;
    95     }
    96 
    97 
    98 }

      

      配置文件如下:

      

     1     <!-- 设置文件上传大小限制 -->
     2     <constant name="struts.multipart.maxSize" value="10000000"/>
     3     <!--文件临时存放目录 -->
     4     <constant name="struts.multipart.saveDir" value="D:/temp"/>
     5 
     6     <package name="default" namespace="/" extends="struts-default">
     7               <!--  默认的全局拦截器 -->
     8               <default-interceptor-ref name="defaultStack"/>
     9 
    10      
    11               <!-- 文件上传 -->
    12              <action name="uploadFile" class="com.test.FileUploadAction" method="uploadFile">
    13                 <!-- 如果配置了全局拦截器栈 defaultStack,是不需要再配置拦截器fileUpload
    14                     因为defaultStack中已包含fileUpload拦截器
    15                 -->
    16                 <!--<interceptor-ref name="fileUpload"/>-->
    17                 <result>/WEB-INF/page/common/success.jsp</result>
    18              </action>
    19 
    20      </package>

      

      不建议在struts.properties文件直接修改struts的配置。

      建议在struts.xml中以类似 <constant name="struts.multipart.maxSize" value="10000000"/>的形式进行配置修改。

      

      上传页面要注意 method="post" enctype="multipart/form-data"

      

     1 <form action="uploadFile.action" method="post" enctype="multipart/form-data">                    
     2     <table cellspacing="0" cellpadding="0">
     3         <tr>
     4             <td>
     5                 <input  type="file" name="file" size="50" contentEditable="false" onChange="checkFile(this.value)">
     6             </td>
     7         </tr>
     8         <tr>
     9             <td>
    10                 <input type="submit" value="上传">
    11             </td>
    12         </tr>
    13     </table>
    14 </form>

      

  • 相关阅读:
    Python中模块之shutil及zipfile&tarfile的功能介绍
    Python中模块之sys的功能介绍
    Python中模块之os的功能介绍
    Python中模块之random的功能介绍
    Python中模块之time&datetime的功能介绍
    Python中模块json与pickle的功能介绍
    博客更新地址,
    Js 执行上下文和作用域
    Js 原型,原型链
    Js 中的事件委托/事件代理
  • 原文地址:https://www.cnblogs.com/luxh/p/2507017.html
Copyright © 2011-2022 走看看