Struts2 文件上传

来源:互联网 发布:linux 内核参数配置 编辑:程序博客网 时间:2024/05/20 17:39

文件上传

1.      struts2的文件上传使用的是apache下的commons-fileupload来实现的。

 

2.      JSP表单要求是post提交,并且enctype=”multipart/form-data”

3.      在action中,需要提供三个属性,一个File类型,名称是表单域名,其他两个分别是表单域名+FileName,表单域名+ContentType,并且提供set方法
UploadAction类

publicclass UploadActionextendsActionSupport{

//File参数应该与表单名一致

    private Filefile;

//文件名,注意写法为 file+FileName

private StringfileFileName;

//文件类型,写法如上

private StringfileContentType;

public String upload()throws IOException{

     InputStream is=new FileInputStream(file);

OutputStream os=new FileOutputStream("F:"+File.separator+"upload"+File.separator+fileFileName);

     intlen=0;

     byte[]buffer=newbyte[512];

     while((len=is.read(buffer))!=-1){

         os.write(buffer, 0,len);

     }

     os.close();

     is.close();

     return"success";

}

publicvoid setFile(Filefile) {

     this.file =file;

}

publicvoid setFileFileName(StringfileFileName) {

     this.fileFileName =fileFileName;

}

publicvoid setFileContentType(StringfileContentType) {

    this.fileContentType =fileContentType;

}

}

注意:必须继承ActionSupport类,否则无法实现文件类型的拦截功能


 

 

struts.xml,控制文件上传大小需要配置拦截器的maxmumSize属性和sturts2的静态属性:struts.multipart.maxSize且静态属性值要大于等于maxmumSize,另外控制文件上传类型需要配置allowedTypes属性,并要配置input的逻辑视图,当文件类型不合法会返回INPUT

<actionname="upload"class="com.zys.action.UploadAction"method="upload">

<!-- 如果要设置上传文件大小,就要引用fileUpload拦截器,并引用defaultStack -->

<interceptor-refname="fileUpload">

     <paramname="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param>

     <paramname="maximumSize">20971520</param>

</interceptor-ref>

<interceptor-refname="defaultStack"></interceptor-ref>

<resultname="success">/success.jsp</result>

<resultname="input">/upload.jsp</result>

</action>

 

JSP页面

<formaction="upload.action"method="post"enctype="multipart/form-data">

            文件:<inputtype="file"name="file"/>

                 <inputtype="submit"value="提交"/>

</form>

 

4.       批量文件上传
JSP
页面

<formaction="batch.action"method="post"enctype="multipart/form-data">

         <inputtype="file"name="file"/>

         <inputtype="file"name="file"/>

         <inputtype="file"name="file"/>

         <inputtype="file"name="file"/>

         <inputtype="submit"value="提交">

</form>

 

struts.xml

<actionname="batch"class="com.zys.action.BatchUploadAction">

     <!--如果要设置上传文件大小,就要引用fileUpload拦截器,并引用defaultStack -->

     <interceptor-refname="fileUpload">

         <paramname="allowedTypes">image/bmp,image/x-png,image/gif,image/jpeg</param>

         <paramname="maximumSize">20971520</param>

     </interceptor-ref>

     <interceptor-refname="defaultStack"></interceptor-ref>

     <resultname="success">/success.jsp</result>

     <resultname="input">/batch.jsp</result>

</action>

 

 

BatchUploadAction

publicclass BatchUploadActionextends ActionSupport{

   

    private File[]file;

    private String[]fileFileName;

    private String[]fileContentType;

   

    public String execute()throws IOException{

        for(inti=0;i<file.length;i++){

            InputStream is=new FileInputStream(file[i]);

OutputStream os=new FileOutputStream("F:"+File.separator+"upload"+File.separator+fileFileName[i]);

            byte[]buffer=newbyte[1024];

            intlen=0;

            while((len=is.read(buffer))!=-1){

                os.write(buffer, 0,len);

            }

            is.close();

            os.close();

        }

        return"success";

    }

 

    publicvoid setFile(File[]file) {

        this.file =file;

    }

 

    publicvoid setFileFileName(String[]fileFileName) {

        this.fileFileName =fileFileName;

    }

 

    publicvoid setFileContentType(String[]fileContentType) {

        this.fileContentType =fileContentType;

    }

}

 

原创粉丝点击