struts2多文件上传

来源:互联网 发布:ife矩阵 编辑:程序博客网 时间:2024/06/05 18:13

多文件上传

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

 

页面:

 

<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;    }   }