struts2多文件上传

多文件上传

多文件上传和单文件上传差不多,只是有个数组接收而已:

 

页面:

 

<body>
    <form action="${pageContext.request.contextPath }/file/upload.action"method="post" enctype="multipart/form-data">
         请选择文件:<input type="file" name="files"/><br/>
         请选择文件:<input type="file" name="files"/><br/>
         请选择文件:<input type="file" name="files"/><br/>
         <input type="submit" value="上传" />
    </form>
  </body>



配置文件中(和单文件上传是一样的):

   

<constant name="struts.multipart.saveDir" value="d://"/>
    <package name="file" namespace="/file"extends="struts-default">
        <action name="upload" class="hwt.action.FileUploadAction">
            <interceptor-ref name="fileUpload">
                <param name="maximumSize">1024</param>
                <param name="allowedTypes">
                     text/plain,application/msword
                    <!--image/png,image/gif,image/jpeg -->
                </param>
            </interceptor-ref>
            <!-- 要放在后面,要不然不会起到作用 -->
            <interceptor-ref name="defaultStack"/>
            <!-- 还需要配置input为错误输出页面 -->
            <result name="input">/fileUpload.jsp</result>
            <result name="success">/downLoad.jsp</result>
            <result name="failure">/fileUpload.jsp</result>
        </action>
    </package>
 

 

Action中

         要继承ActionSupport

/

*
 * ActionSupport里面提供了validate的校验功能
 * 实际上继承ActionSupport之后
 * 就等同于实现了很多接口Action,Validateable,ValidationAWare,TextProvider,LoacalProvider,Serializable
 * 可以提供数据校验序列化国际化等功能
 */
public class FileUploadAction extends ActionSupport{
    private File[] files ;
    //这个名字是struts2会自动填充,但是取名必须是-属性名ContentType;
    private String[] filesContentType;
    //这个名字是struts2会自动填充,但是取名必须是-属性名FileName;
    private String[] filesFileName;
   
    public String execute() throws IOException{
        if (files.length!=0 && files != null) {
            int len = files.length;
            String realPath = ServletActionContext.getServletContext().getRealPath(FileUploadUtils.baseName);
            String savepath = FileUploadUtils.getSavePath(realPath);
            for(int i = 0 ; i < len ; i++){
                String uuidFileName = FileUploadUtils.getUUIDName(filesFileName[i]);
                File descFile = new File(savepath,uuidFileName);
                //这个工具类是commons.io包下面的
                FileUtils.copyFile(files[i], descFile);
            }
            return "success";
        }else {
            return "failure";
        }
       
    }
 
    public File[] getFiles() {
        return files;
    }
 
    public void setFiles(File[] files) {
        this.files = files;
    }
 
    public String[] getFilesContentType() {
        return filesContentType;
    }
 
    public void setFilesContentType(String[] filesContentType) {
        this.filesContentType = filesContentType;
    }
 
    public String[] getFilesFileName() {
        return filesFileName;
    }
 
    public void setFilesFileName(String[] filesFileName) {
        this.filesFileName = filesFileName;
    }
         //setter  getter
}
 

工具类中:

public class FileUploadUtils {
    public static String baseName;
   
    //单利模式得到属性文件中的文件上传的配置
    static{
        Properties fileProperties = new Properties();
        InputStream iStream =FileUploadUtils.class.getResourceAsStream("/fileUpload.properties");
        try {
            fileProperties.load(iStream);
        } catch (IOException e) {
            // TODO Auto-generatedcatch block
            e.printStackTrace();
        }
        baseName = fileProperties.getProperty("basepath");
    }
   
    //把上传的文件名字改成UUID
    public static String getUUIDName(String fileName){
        UUID uuid = UUID.randomUUID();
        String extension = fileName.substring(fileName.lastIndexOf("."));
        return uuid+extension;
    }
   
    //得到服务器上的保存路径
    public static String getSavePath(String realPath){
        //对上传的文件进行分级
        Calendar calendar = new GregorianCalendar();
        int year = calendar.get(Calendar.YEAR);
        int month = calendar.get(Calendar.MONTH);
        int day   =calendar.get(Calendar.DAY_OF_MONTH);
        String savePath = realPath+"\\"+year+"\\"+month+"\\"+day;
        File file = new File(savePath);
        if (!file.exists()) {
            file.mkdirs();
        }
        System.out.println(savePath);
        return savePath;
    }
   
}
 


 

你可能感兴趣的:(struts2多文件上传)