天天看點

攔截器實作檔案過濾

上面手動實作檔案過濾的方式雖然簡單,但畢竟需要書寫大量的過濾代碼,不利于程式的高層次解構,而且開發複雜。

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

<?xml version="1.0" encoding="GBK"?>  

<!DOCTYPE struts PUBLIC  

    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN" 

    "http://struts.apache.org/dtds/struts-2.1.7.dtd">     

<struts>  

    <constant name="struts.custom.i18n.resources" value="mess"/>  

    <!-- 設定該應用使用的解碼集 -->  

    <constant name="struts.i18n.encoding" value="GBK"/>  

    <package name="lee" extends="struts-default">  

        <!-- 配置處理檔案上傳的Action -->  

        <action name="uploadPro" class="org.crazyit.app.action.UploadAction">  

            <!-- 配置fileUpload的攔截器 -->  

            <interceptor-ref name="fileUpload">  

                <!-- 配置允許上傳的檔案類型 -->  

                <param name="allowedTypes">image/png  

                    ,image/gif,image/jpeg</param>  

                <!-- 配置允許上傳的檔案大小 -->  

                <param name="maximumSize">2000</param>   

            </interceptor-ref>  

            <!-- 配置系統預設的攔截器 -->  

            <interceptor-ref name="defaultStack"/>  

            <!-- 動态設定Action的屬性值 -->  

            <param name="savePath">/uploadFiles</param>  

            <!-- 配置Struts 2預設的視圖頁面 -->  

            <result>/WEB-INF/content/succ.jsp</result>  

            <result name="input">/WEB-INF/content/upload.jsp</result>  

        </action>  

        <action name="*">  

            <result>/WEB-INF/content/{1}.jsp</result>     

    </package>  

</struts>  

上面的攔截器過濾不僅過濾了檔案的類型,也過濾了檔案大小。上傳檔案的類型隻能是圖檔檔案,并且檔案大小不能大于2000位元組(當然,我們随時可以更改到更大)。如果我們上傳檔案的檔案太大,系統将轉入input邏輯視圖,也就是/WEB-INF/content/upload.jsp頁面。

注意:如果需要使用檔案上傳攔截器來過濾檔案大小,或者過濾檔案内容,則必須顯示配置引用Struts預設的攔截器棧:defaultStack。而且fileUpload攔截器必須配置在defaultStack攔截器棧之前。

本文轉自

<a href="http://blog.51cto.com/javaligang">fkJava李剛</a>

 51CTO部落格,原文連結:http://blog.51cto.com/javaligang/890915 ,如需轉載請自行聯系原作者