Ordinary hut

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

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

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

          第二種是根據struts2自帶的fileupload攔截器中提供的allowedTypes來進行限制,步驟如下:
          1 配置fileupload攔截器
          struts2的defaultStack中已經含有fileupload攔截器,如果想加入allowedTypes參數,需要從新寫一個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>
          上面配置的是上傳文件類型的限制,其實共有兩個參數
          maximumSize (可選) - 這個攔截器允許的上傳到action中的文件最大長度(以byte為單位). 注意這個參數和在webwork.properties中定義的屬性沒有關系,默認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中的屬性要做相應更改為
              private File xxx;
              
          private String xxxContentType;
              
          private String xxxFileName;
          同時注意大小寫一定要一致

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

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

          這里稍作說明(拷貝一下struts2的幫助):
          如果你的action實現了ValidationAware接口(如果action繼承了ActionSupport,那么就相當于實現了ValidationAware),這個攔截器就可以添加幾種字段錯誤.這些錯誤信息是基于存儲在struts-messages.properties文件中的一些i18n值,這個文件是所有i18n請求的默認文件.你可以在自己消息文件的復寫以下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文件上傳中,如何限制上傳的文件類型  回復  更多評論   

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

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


          網站導航:
           
          主站蜘蛛池模板: 平遥县| 长兴县| 内黄县| 资源县| 安丘市| 府谷县| 红安县| 阳江市| 武威市| 故城县| 乌鲁木齐县| 金堂县| 屯昌县| 桓仁| 石嘴山市| 阿瓦提县| 额济纳旗| 河南省| 宁阳县| 朝阳市| 广宗县| 大竹县| 巢湖市| 北京市| 防城港市| 正镶白旗| 金沙县| 铁岭县| 昭平县| 大兴区| 天长市| 南充市| 叶城县| 侯马市| 凤阳县| 龙口市| 那坡县| 凤凰县| 大新县| 镇安县| 鸡泽县|