Spring MVCファイルアップロードのMaxUploadSizeExceedException異常処理

4193 ワード

spring MVCアップロードファイルは、common.fileupledコンポーネントを使用しています.このコンポーネントはファイルをアップロードする時にファイルサイズの制限があります.この制限を超えた後、MaxUploadSizeExceedExceptionの異常を投げます.
この異常はspringでアップロードファイルの情報をチェックする時に投げましたが、まだコントローラ内でファイルを解析する方法に入っていません.
インターネットで調べた方法は:
1 org.springframe ebook.web.servlet.handle.SimpleMappingException Resoloverを使用して、例えば:
[html  view plin copy
                  <プロ key=「org.springframe ebook.web.multiiPad.MaxUploadSizeExceedException」error/maxUploadExceded<prop>             個人はこのような方式に賛成しています.multiiprtResolaverは通常グローバルで使用されています.指定されたmaxUploadSizeは通常グローバルでもあります.ここでグローバル異常処理を配置して応答します.

自己実現.Handler Exception Resolover類、例えば
[java]  view plin copy
public クラス MyHandler Exception Resolaver implements Handler Exception Resolaver {       prvate ログ ロゴ = Log Factory.get Log(get Class);       public ModelAndView reolveException(HttpServletRequest) request               HttpServlet Resonse レスポンス Object ハンドルさん、 Exception ex) {           log.warn("Handle" exception: " + ex.get Class().get Name();                            Map モデル = new HashMap();           model.put(「ex」) ex.get Class().get SimpleName();           model.put(「error」、 ex.getMessage();           return new ModelAndView(「error」、 モデル       }   別の定義
この2つの方法の侵入性は本当に大きすぎます.ソースコードorg.springframe ebook.web.multiipot.com mmons.MultiputResover 127行を確認してください.
[java]  view plin copy
if (this.resovelazly) {               return new Default MultiiPad Http Servlet Request(request) {                   @オーバーライド                   protected void initialize MultiiPad() {                       MultiiprtParsingResoult パーニングResoult = parseRequest;                       set MultiiprtFiles(parsingResult.get MultiiprtFiles);                       set MultipartParameeters(parsingResult.get MultipartParameeters();                   }               };           }   この属性を定義することができます.ファイルを解析する時に異常を投げてください.そして、コントローラに異常処理を定義する方法があります.
[html  view plin copy
        class=「org.springframe ewek.web.multiiprt.com mmons.MultiiplectResover」           p:default Enccoding="utf-8" >                         
   異常処理を定義する方法
/**
     *     
     * @param ex
     * @param request
     * @Description:
     */
    @ExceptionHandler(Exception.class)
    public void handleException(Exception ex,HttpServletRequest request,HttpServletResponse response){
        StringBuffer sb = new StringBuffer();
        sb.append("<script language='javascript'>history.go(-1);alert('");
        if (ex instanceof org.springframework.web.multipart.MaxUploadSizeExceededException){
            sb.append("        "+((MaxUploadSizeExceededException)ex).getMaxUploadSize()/1000+"kb");
         } else{
             sb.append("    !");
        }
        sb.append("!');</script>");
        try {
            System.out.println(sb.toString());
            response.setContentType("text/html; charset=utf-8");  
            response.getWriter().println(sb.toString());
            response.getWriter().flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return;
    }
[java]  view plin copy
@Exception Handler(Exception.class)            public String handleException(Exception) ex,HttpServlet Request request {              if(ex) instance of org.springframe ework.web.multipart.MaxUploadSizeException){               request.set Attribute(「error」、 "ファイルの長さが超過しました.           }           return 向きを変えるページは、自由に定義できます.または元のページです.       }