Struts1上传文件的大小及类型的限制

程序要求:

1.文件上传名不能为空,

2.文件上传的类型必须是java zip格式

文件上传大小必须是5M

 

第一种方法是通过javascript校验来限制,获取input的value然后截取扩展名进行判断即可。

第二种是根据struts2自带的fileupload拦截器中提供的allowedTypes来进行限制,步骤如下:

 

1 配置fileupload拦截器

struts.xml文件中的代码如下:

<struts>

  

   <includefile="struts-constant.xml"/>

 

 

   <packagename="user"namespace="/csdn"extends="struts-default">

 

 

     

      <global-results>

         <resultname="input">/index.jspresult>

      global-results>

 

 

 

      <actionname="FileAction_*"class="www.csdn.struts_upload_interceptor.action.FileAction"method="{1}">

         <interceptor-refname="fileUpload">

        

         <paramname="allowedTypes"> application/octet-stream,application/x-zip-compressed

param>

        

         <paramname="maximumSize">5242880param>

         interceptor-ref>

        

         <interceptor-refname="defaultStack"/>

         <resultname="success">/index.jspresult>

      action>

 

     

   package>

struts>

上面配置的是上传文件类型的限制,其实共有两个参数:

maximumSize (可选)- 这个拦截器允许的上传到action中的文件最大长度(以byte为单位).注意这个参数和在webwork.properties中定义的属性没有关系,默认2MB

 

allowedTypes (可选)- 以逗号分割的contentType类型列表(例如text/html),这些列表是这个拦截器允许的可以传到action中的contentType.如果没有指定就是允许任何上传类型.Tomcat/conf/web.xml文件中就有文件的类型的名称

文件大小的设置需在常量配置xml的文件中进行如下配置:

   <constantname="struts.multipart.maxSize"value="5242880">constant>

 

2 jsp页面定义如下(testFileUpload.jsp)

<body>

    上传文件<br>

    <hr>

    错误信息:

    <s:fielderror>s:fielderror><br>

    action错误信息:

    <s:actionerror/>

    <hr>

    <div>

    <form action="${pageContext.request.contextPath }/csdn/FileAction_upload.action"method="post"enctype="multipart/form-data">

   

         文件上传:<inputname="upload"type="file"><br>

          <inputtype="submit"value="上传">

    form>

    div>

 

  body>

添加struts2标签:

<%@ tagliburi="/struts-tags"prefix="s"%>

3 后台的FileAction声明如下

 

public class FileAction extends ActionSupport {

  

   private Filefile;//上传的文件

   private StringcontentType;//文件类型

   private Stringfilename;//文件名

  

   private Stringpath;

  

  

  

   public String getPath() {

      return path;

   }

 

   public void setPath(String path) {

      this.path = path;

   }

 

   public void setUpload(File file) {

      this.file = file;

   }

  

  

  

   public void setUploadFileName(String filename) {

      this.filename = filename;

   }

  

   public String upload()

   {

      //创建文件路径

      String path=ServletActionContext.getServletContext().getRealPath("WEB-INF/uploads");

      //上传路径的文件

      File pfile=new File(path);

      //文件的路径创建

      if(!pfile.exists())

      {

         pfile.mkdirs();

      }

     

      try {

         FileUtils.copyFile(file,new File(pfile,System.currentTimeMillis()+"_"+filename));

         System.out.println("文件上传成功。。。。。。。。。。");

         returnSUCCESS;

      } catch (IOException e) {

         // TODO Auto-generatedcatch block

         e.printStackTrace();

      }

      return INPUT;

   }

 

   public String getContentType() {

      return contentType;

   }

 

   public void setContentType(String contentType) {

      this.contentType = contentType;

   } 

         

}
注意:如果jsp中file的name="xxx",那么后台action中的属性要做相应更改为

private File xxx;

private String xxxContentType;

private String xxxFileName;

同时注意大小写一定要一致

4.文件名不能为空的问题:

在FileAction文件的同目录下,建一个FileAction-validation.xml,编写代码如下:

<fieldname="upload">

        <field-validatortype="requiredstring">

          <paramname="trim">trueparam>

          <message>文件名不能为空message>

        field-validator>

     field>

 

运行效果图:

1

2.上传的文件类型不对,

3.文件名为空


出现的bug及解决:

bug:上传一个文件后,总会出现一个信息错误,即出现文件名不能为空的提示信息

bug的原因:文本框中的value值本来就是空的 所以文件名不能为空的问题不能在第4步中写,直接在Action中进行判断就可。

解决:在FileAction的upload方法中进行以下判断:

if("".equals(file) || file==null)
  {
   System.out.println("文件名不能为空");
  }

再运行,程序则正常显示了,不会再出现文件名不能为空的信息。

你可能感兴趣的:(struts2)