2010-07-20 33 views
5

Tôi biết khó kiểm tra kích thước tệp ở phía máy khách (trình duyệt) chỉ bằng javascript thuần túy.Bắt lỗi kích thước tải lên tối đa của Spring MVC

Bây giờ, câu hỏi của tôi là, Có cách nào ở phía máy chủ để bắt ngoại lệ như thế này không?

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

Điều gì xảy ra là nó không đạt được phương pháp đăng bài @controller của tôi và nó chỉ phát sinh ngoại lệ đang bị lỗi của tôi.jsp.

Điều tôi đang nghĩ là, có thể thực hiện điều này trong phương pháp chú thích mvc mùa xuân không?

@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 
    }  
} 

Vấn đề của tôi là, nó không đạt đến điểm này và chỉ ném lên một ngoại lệ lớn.

Mặc dù error.jsp có thể bắt được nó, tôi sẽ nghĩ rằng nó thân thiện với người dùng nếu tôi có thể cảnh báo cho người dùng rằng tệp họ sắp tải lên vượt quá giới hạn.

Đây là ứng dụng Spring MVC 2.5 bằng cách này. Điều này có thể không?

Trả lời

4

Trường hợp ngoại lệ này được ném vào DispatcherServlet.doDispatch(), vì vậy bạn sẽ có thể nắm bắt điều này bằng cách sử dụng HandlerExceptionResolverconfigured in your context.

+0

cảm ơn .. Tôi đã thực hiện một số đọc về điều này và tôi đang sử dụng nó ngay bây giờ. Vấn đề của tôi là, làm thế nào tôi có thể hiển thị cùng một biểu mẫu một lần nữa được điền với cùng một mô hình và biểu mẫu: các đối tượng lỗi. Khi tôi chuyển tiếp sang cùng một biểu mẫu một lần nữa, không có dữ liệu nào được điền. –

+2

@MarkEstrada Nếu kích thước của yêu cầu với tất cả các tham số, incl. tham số tệp, vượt quá 'maxUploadSize', các tham số yêu cầu sẽ không được phân tích cú pháp. Vì vậy, nó không tích hợp tốt với xác nhận. –

3

Ngoài ra, không chỉ định maxUploadSize, và kiểm tra trong bộ điều khiển/validator nếu kích thước vượt quá giới hạn của bạn:

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

này kiểm tra kích thước của tập tin trong câu hỏi, không phải là tập tin cộng với tất cả các khác các tham số yêu cầu là maxUploadSize của CommonsMultipartResolver.

+2

Làm điều này sẽ cho phép ai đó tải lên một tệp cực kỳ lớn và làm lộn xộn đĩa của bạn. – Lawrence

Các vấn đề liên quan