且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

拦截器实现文件过滤

更新时间:2022-10-02 12:07:51

上面手动实现文件过滤的方式虽然简单,但毕竟需要书写大量的过滤代码,不利于程序的高层次解构,而且开发复杂。

Struts 2提供了一个文件上传的拦截器,通过配置该拦截器可以更轻松地实现文件过滤。Struts 2中文件上传的拦截器是fileUpload,为了让该拦截器起作用,只需要在该Action中配置该拦截器引用即可。

配置fileUpload拦截器时,可以为其指定两个参数。

Ø  allowedTypes:该参数指定允许上传的文件类型,多个文件类型之间以英文逗号(,)隔开。

Ø  maximumSize:该参数指定允许上传的文件大小,单位是字节。

通过配置fileUpload的拦截器,可以更轻松地实现文件过滤,当文件过滤失败后,系统自动转入input逻辑视图,因此必须为该Action配置名为input的逻辑视图。除此之外,还必须显式地为该Action配置defaultStack的拦截器引用。

通过拦截器来实现文件过滤的配置文件如下。

程序清单:codes\04\4.3\autoFilter\WEB-INF\src\struts.xml


  1. <?xml version="1.0" encoding="GBK"?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 
  4.     "http://struts.apache.org/dtds/struts-2.1.7.dtd">     
  5. <struts>  
  6.     <constant name="struts.custom.i18n.resources" value="mess"/>  
  7.     <!-- 设置该应用使用的解码集 -->  
  8.     <constant name="struts.i18n.encoding" value="GBK"/>  
  9.     <package name="lee" extends="struts-default">  
  10.         <!-- 配置处理文件上传的Action -->  
  11.         <action name="uploadPro" class="org.crazyit.app.action.UploadAction">  
  12.             <!-- 配置fileUpload的拦截器 -->  
  13.             <interceptor-ref name="fileUpload">  
  14.                 <!-- 配置允许上传的文件类型 -->  
  15.                 <param name="allowedTypes">image/png  
  16.                     ,image/gif,image/jpeg</param>  
  17.                 <!-- 配置允许上传的文件大小 -->  
  18.                 <param name="maximumSize">2000</param>   
  19.             </interceptor-ref>  
  20.             <!-- 配置系统默认的拦截器 -->  
  21.             <interceptor-ref name="defaultStack"/>  
  22.             <!-- 动态设置Action的属性值 -->  
  23.             <param name="savePath">/uploadFiles</param>  
  24.             <!-- 配置Struts 2默认的视图页面 -->  
  25.             <result>/WEB-INF/content/succ.jsp</result>  
  26.             <result name="input">/WEB-INF/content/upload.jsp</result>  
  27.         </action>  
  28.         <action name="*">  
  29.             <result>/WEB-INF/content/{1}.jsp</result>     
  30.         </action>  
  31.     </package>  
  32. </struts>  

上面的拦截器过滤不仅过滤了文件的类型,也过滤了文件大小。上传文件的类型只能是图片文件,并且文件大小不能大于2000字节(当然,我们随时可以更改到更大)。如果我们上传文件的文件太大,系统将转入input逻辑视图,也就是/WEB-INF/content/upload.jsp页面。

注意:如果需要使用文件上传拦截器来过滤文件大小,或者过滤文件内容,则必须显示配置引用Struts默认的拦截器栈:defaultStack。而且fileUpload拦截器必须配置在defaultStack拦截器栈之前。


 

本文转自

fkJava李刚

 51CTO博客,原文链接:http://blog.51cto.com/javaligang/890915 ,如需转载请自行联系原作者