2010-07-20 7 views
5

So che è difficile controllare la dimensione del file sul lato client (browser) con solo javascript puramente.Catch Spring MVC Maxupload Size Errore

Ora, la mia domanda è: esiste un modo sul lato server per rilevare un'eccezione come questa?

org.springframework.web.multipart.MaxUploadSizeExceededException: Maximum upload size of 2000000 bytes 

quello che succede è che, non raggiunge il mio metodo @controller postale e getta solo su l'eccezione che si sta catch up dal mio error.jsp.

Quello che stavo pensando è che, è possibile farlo nel metodo annotato mvc di primavera?

@RequestMapping("/uploadFile.htm") 
    public String uploadAttachment(
     HttpServletRequest request, 
     @RequestParam(required = false, value = "attached-file") MultipartFile file, 
     ModelMap model) throws Exception { 

     if(checkfilesize(file)){ 
      //populate model 
      //add error if appplicable 
      //return same form again 
     } 
     //return success 
    }  
} 

Il mio problema è, esso doesnt raggiunge fino a questo punto e basta buttare un un'eccezione grosso grasso.

Sebbene error.jsp sia stato in grado di catturarlo, penso che sia molto user friendly se posso avvisare l'utente che il file che stanno per caricare supera il limite.

Questa è l'applicazione Spring MVC 2.5 a proposito. È possibile?

risposta

4

Questa eccezione viene generata in DispatcherServlet.doDispatch(), quindi dovresti essere in grado di rilevare questo utilizzando HandlerExceptionResolverconfigured in your context.

+0

grazie .. Ho fatto qualche lettura su questo e lo sto usando ora. Il mio problema è, come posso mostrare di nuovo la stessa forma popolata con lo stesso modello e la stessa forma: oggetti di errore. Quando eseguo di nuovo lo stesso modulo, nessun dato viene popolato. –

+2

@MarkEstrada Se la dimensione della richiesta con tutti i parametri, incl. il parametro file, supera 'maxUploadSize', i parametri della richiesta non verranno analizzati. Quindi non si integra bene con la convalida. –

3

In alternativa, non specificare maxUploadSize, e il check-in del regolatore/validatore se la dimensione supera il limite:

if (file.getSize() > 2000000) { 
    result.rejectValue("file", "<your.message.key>"); 
} 

Questo controlla la dimensione del file in questione, non il file oltre a tutte le altre richiede parametri come CommonsMultipartResolver's maxUploadSize fa.

+2

Fare ciò consentirebbe a qualcuno di caricare un file incredibilmente grande e ingombrare il disco. – Lawrence