<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Ordinary hut

    人間一福地,勝似天仙宮
    posts - 61, comments - 50, trackbacks - 0, articles - 1
    這個在struts2的doc中已經(jīng)有所說明,但是說得并不詳細,而且他給的例子是有錯誤的,下面我將列出文件上傳并限制類型的具體步驟

    struts2版本是2.1.6
    struts2是根據(jù)contentType來限制的,并不是文件的擴展名
    比如我想僅上傳image/png,image/gif,image/jpeg這三種文件類型

    第一種方法是通過javascript校驗來限制,這個比較簡單,獲取input的value然后截取擴展名進行判斷即可

    第二種是根據(jù)struts2自帶的fileupload攔截器中提供的allowedTypes來進行限制,步驟如下:
    1 配置fileupload攔截器
    struts2的defaultStack中已經(jīng)含有fileupload攔截器,如果想加入allowedTypes參數(shù),需要從新寫一個defaultstack ,拷貝過來修改一下即可:
                <interceptor-stack name="myDefaultStack">
                    
    <interceptor-ref name="exception"/>
                    
    <interceptor-ref name="alias"/>
                    
    <interceptor-ref name="servletConfig"/>
                    
    <interceptor-ref name="i18n"/>
                    
    <interceptor-ref name="prepare"/>
                    
    <interceptor-ref name="chain"/>
                    
    <interceptor-ref name="debugging"/>
                    
    <interceptor-ref name="profiling"/>
                    
    <interceptor-ref name="scopedModelDriven"/>
                    
    <interceptor-ref name="modelDriven"/>
                    
    <interceptor-ref name="fileUpload">
                      
    <param name="allowedTypes">
                         image/png,image/gif,image/jpeg
                      
    </param>
                    
    </interceptor-ref>
                    
    <interceptor-ref name="checkbox"/>
                    
    <interceptor-ref name="staticParams"/>
                    
    <interceptor-ref name="actionMappingParams"/>
                    
    <interceptor-ref name="params">
                      
    <param name="excludeParams">dojo\..*,^struts\..*</param>
                    
    </interceptor-ref>
                    
    <interceptor-ref name="conversionError"/>
                    
    <interceptor-ref name="validation">
                        
    <param name="excludeMethods">input,back,cancel,browse</param>
                    
    </interceptor-ref>
                    
    <interceptor-ref name="workflow">
                        
    <param name="excludeMethods">input,back,cancel,browse</param>
                    
    </interceptor-ref>
                
    </interceptor-stack>
            
    </interceptors>
            
    <default-interceptor-ref name="myDefaultStack"></default-interceptor-ref>
    僅修改代碼中的
                    <interceptor-ref name="fileUpload">
                      
    <param name="allowedTypes">
                         image/png,image/gif,image/jpeg
                      
    </param>
                    
    </interceptor-ref>
    上面配置的是上傳文件類型的限制,其實共有兩個參數(shù)
    maximumSize (可選) - 這個攔截器允許的上傳到action中的文件最大長度(以byte為單位). 注意這個參數(shù)和在webwork.properties中定義的屬性沒有關(guān)系,默認2MB
    allowedTypes (可選) 
    - 以逗號分割的contentType類型列表(例如text/html),這些列表是這個攔截器允許的可以傳到action中的contentType.如果沒有指定就是允許任何上傳類型.


    2 jsp頁面定義如下(testFileUpload.jsp
        <s:form action="testFileUpload" method="post" enctype="multipart/form-data">
            
    <s:file name="file"theme="simple"/>
            
    <s:fielderror name="file"></s:fielderror>
            
    <s:submit/>
        
    </s:form>
    3 后臺的action聲明如下(我用的是struts2的注解進行action配置)
    public class TestFileUploadAction extends ActionSupport{
        
    private File file;
        
    private String fileContentType;
        
    private String fileFileName;
        @Action(
                value 
    = "testFileUpload", results = {
                    @Result(name 
    = "input", location = "/testFileUpload.jsp"),
                    @Result(name 
    = "success", location = "/testFileUploadSuccess.jsp")
                }
        )
        
    public String execute() {
            
    return SUCCESS;
        }
        get/set......
    }
    注意:如果jsp中file的name="xxx",那么后臺action中的屬性要做相應(yīng)更改為
        private File xxx;
        
    private String xxxContentType;
        
    private String xxxFileName;
    同時注意大小寫一定要一致

    4 定義錯誤文件類型的消息提示,這個需要用到struts2的資源文件,在struts.properties文件中加入
    struts.custom.i18n.resources=globalMessages
    globalMessages對應(yīng)著資源文件名

    5 在源文件夾下定義資源文件
    globalMessages.properties,并在里面加入如下信息:
    struts.messages.error.content.type.not.allowed=upload file contenttype is invalidate

    這里稍作說明(拷貝一下struts2的幫助):
    如果你的action實現(xiàn)了ValidationAware接口(如果action繼承了ActionSupport,那么就相當于實現(xiàn)了ValidationAware),這個攔截器就可以添加幾種字段錯誤.這些錯誤信息是基于存儲在struts-messages.properties文件中的一些i18n值,這個文件是所有i18n請求的默認文件.你可以在自己消息文件的復(fù)寫以下key的消息文 字
    struts.messages.error.uploading - 文件不能上傳的通用錯誤信息
    struts.messages.error.file.too.large 
    - 上傳文件長度過大的錯誤信息
    struts.messages.error.content.type.not.allowed 
    - 當上傳文件不符合指定的contentType


    以上配置完畢后,測試一下,對于非法的contentType,例如xxx.log這個文件的的contentType是pplication/octet-stream
    會給出提示:upload file contenttype is invalidate



    Feedback

    # re: struts2文件上傳中,如何限制上傳的文件類型  回復(fù)  更多評論   

    2013-11-24 22:43 by hu
    上面的回答得很垃圾...垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾垃圾

    只有注冊用戶登錄后才能發(fā)表評論。


    網(wǎng)站導(dǎo)航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲小说图区综合在线| 中文字幕的电影免费网站| 四只虎免费永久观看| 免费无码又爽又刺激一高潮| 亚洲三级在线视频| 亚洲一区二区三区在线观看精品中文 | 一二三四免费观看在线电影| 色噜噜的亚洲男人的天堂| 国产成人A人亚洲精品无码| 手机在线看永久av片免费| 国产精品成人69XXX免费视频| 亚洲系列中文字幕| 亚洲日韩中文字幕日韩在线| 4hu四虎最新免费地址| yy一级毛片免费视频| 精品亚洲AV无码一区二区三区| 国产成人综合亚洲亚洲国产第一页| 中文字幕无码免费久久99| 中文字幕在线成人免费看| 亚洲精品无码久久久久YW| 亚洲成人在线网站| 亚洲精品无码久久久| 好吊妞在线成人免费| 99久久免费精品高清特色大片| 一级a性色生活片久久无少妇一级婬片免费放 | 蜜桃视频在线观看免费视频网站WWW| 亚洲AV无码一区二区乱子仑| 自怕偷自怕亚洲精品| 国产AV无码专区亚洲AWWW| 最近中文字幕mv手机免费高清 | 国产免费观看网站| av无码免费一区二区三区| 大地资源中文在线观看免费版 | 亚洲毛片免费观看| 午夜理伦剧场免费| WWW国产成人免费观看视频| 亚洲s码欧洲m码吹潮| 亚洲三级中文字幕| 亚洲性天天干天天摸| 亚洲成AV人片在线播放无码| 中文字幕亚洲图片|