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.jsp</result>

      </global-results>

 

 

 

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

         <interceptor-refname="fileUpload">

         <!-- 上传文件类型的限制   上传javazip格式文件-->

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

</param>

         <!-- 上传文件大小的设置byte为单位  1M=1024KB=1024*1024B   5M=5242880B  默认为2M-->

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

         </interceptor-ref>

         <!-- 默认拦截器栈 -->

         <interceptor-refname="defaultStack"/>

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

      </action>

 

     

   </package>

</struts>

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

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

 

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

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

<!-- 设置文件上传的大小 value必须大于或等于拦截器中的值 -->

   <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">true</param>

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

        </field-validator>

     </field>

 

运行效果图:

1

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

3.文件名为空


出现的bug及解决:

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

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

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

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章