5

मैंमल्टीपार्ट फ़ाइल अधिकतम आकार अपवाद - वसंत बूट embbeded बिल्ला

multipart.maxFileSize: 1mb 
multipart.maxRequestSize: 1mb 

को अधिकतम फ़ाइल आकार निर्धारित किया है यह मेरा नियंत्रक है:

@RequestMapping(method=RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.MULTIPART_FORM_DATA_VALUE) 
@ResponseStatus(HttpStatus.CREATED) 
@Secured(Privileges.CAN_USER_READ) 
public void create(@RequestParam("file")final MultipartFile file,Principal principal) throws IllegalStateException, IOException,MultipartException{ 

    medicalHistoryService.create(new MedicalHistory(file)); 
} 

यह है त्रुटि संदेश

2016-03-03 13:48:24.560 WARN 4992 --- [nio-8080-exec-1] h.c.w.RestResponseEntityExceptionHandler : Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (9288401) exceeds the configured maximum (1048576) 

2016-03-03 13:48:25.545 WARN 4992 --- [nio-8080-exec-2] h.c.w.RestResponseEntityExceptionHandler : Could not parse multipart servlet request; nested exception is java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$SizeLimitExceededException: the request was rejected because its size (9288401) exceeds the configured maximum (1048576) 

और अधिक आकार के फ़ाइल के अनुरोध के बाद अंतिम परिणाम समस्या लोडिंग पेज है। मुझे स्टैक ट्रेस में कोई अन्य त्रुटि नहीं मिलती है, इसलिए मैं वास्तव में क्या चल रहा हूं उसके साथ अटक गया हूं। ओह हाँ मैंने कई अन्य समाधानों की कोशिश की है जैसे फिल्टर पंजीकृत करना, त्रुटि नियंत्रक में अपवाद को संभालना। हर बार मैं एक ही परिणाम के साथ खत्म हो जाएगा - सर्वर दुर्घटना। Tomcat crash

संपादित 2

मेरे अपवाद हैंडलिंग वर्ग:

@ControllerAdvice 
public class RestResponseEntityExceptionHandler extends 
ResponseEntityExceptionHandler{ 

// 413 MultipartException - file size too big 
@ExceptionHandler({MultipartException.class,FileSizeLimitExceededException.class,java.lang.IllegalStateException.class}) 
public ResponseEntity<Object> handleSizeExceededException(final WebRequest request, final MultipartException ex) { 
    //log.warn("413 Status Code. File size too large {}", ex.getMessage()); 
    log.warn(ex.getMessage()); 
    final ApiError apiError = message(HttpStatus.PAYLOAD_TOO_LARGE, ex); 
    return handleExceptionInternal(ex, apiError, new HttpHeaders(), HttpStatus.PAYLOAD_TOO_LARGE, request); 
} 

}

+0

आपने अपना कोड पर्याप्त नहीं दिखाया है। उदाहरण के लिए 'हैंडलएक्सप्शन इंटरनेशनल' क्या करता है। ए [न्यूनतम, पूर्ण, सत्यापन योग्य उदाहरण] (http://stackoverflow.com/help/mcve) लोगों की आपकी सहायता करने में आसान बना देगा। –

+0

'हैंडलएक्सप्शन इन्टरनेट' 'ResponseEntityExceptionHandler' की आंतरिक विधि है, जो दस्तावेज़ीकरण द्वारा है" {@ लिंक नियंत्रक एडवाइस @ कंट्रोलरएडवाइस} कक्षा * के लिए एक सुविधाजनक आधार वर्ग * जो केंद्रीकृत अपवाद हैंडलिंग प्रदान करना चाहता है "। –

उत्तर

10

यह मुश्किल था। Tomcat संपत्ति MaxSwallowSize इस समस्या का कारण बन रहा था। जाहिर है यह टोमकैट के हाल के संस्करणों में से एक में पेश किया गया था। इसके पीछे पूरा विचार यह था कि अगर टोमकैट को एहसास हुआ कि अनुरोध को खारिज करने जा रहा था, तो डिफ़ॉल्ट 2 एमबी से कम कनेक्शन को समाप्त करने के लिए (कम से कम यह मेरी व्याख्या थी)। इस संपत्ति को सरल ओवरराइड करना चीजों को हल करता है। मुझे एहसास है कि यह सही समाधान नहीं है, लेकिन कनेक्शन को समाप्त करने से यह काफी बेहतर है।

@Bean 
public TomcatEmbeddedServletContainerFactory containerFactory() { 
    TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); 
    factory.addConnectorCustomizers(new TomcatConnectorCustomizer() { 
     @Override 
     public void customize(Connector connector) { 
     ((AbstractHttp11Protocol<?>) connector.getProtocolHandler()).setMaxSwallowSize(-1); 
     } 
    }); 
    return factory; 
} 
+0

आपने मुझे प्रश्न में अनिवार्य रूप से उसी कोड को पोस्ट करने से बचाया है। मुझे संदेह है कि अगर मैंने कभी भी कई घंटों की परेशानी के बिना जवाब खोज लिया होगा, तो धन्यवाद, धन्यवाद, धन्यवाद। –

+1

@ टिमपेरी आपका स्वागत है। मदद करने के लिए हमेशा खुश :) –

+0

धन्यवाद आदमी, आपने इसे दबाया, यह स्प्रिंगबूट दस्तावेज़ का हिस्सा बन गया। – lekant

10

गुण की तरह करना चाहिए:
spring.http.multipart.max-file-size=128KB
spring.http.multipart.max-request-size=128KB

देखें spring boot guides

0

मैं की तरह इस मुद्दे को हल करने के लिए application.yml में कुछ लाइनों ने लिखा है:

spring: 
    http: 
     multipart: 
      max-file-size: 10MB 
      max-request-size: 10MB 

यह मदद की जबकि मैंने एप्पल में लिखा था ication.properties लेकिन yml में नहीं।

+0

यह पोस्ट प्रश्न का उत्तर देने का वास्तविक प्रयास नहीं है।कृपया ध्यान दें [स्टैक ओवरफ़्लो चर्चा मंच की तरह काम नहीं करता है] (http://stackoverflow.com/about), यह एक प्रश्नोत्तर साइट है जहां प्रत्येक पोस्ट या तो कोई प्रश्न या प्रश्न का उत्तर होता है। पोस्ट में [टिप्पणियां] भी हो सकती हैं (http://stackoverflow.com/help/privileges/comment) - इस तरह के छोटे वाक्यों - जिसका उपयोग किसी लेखक से स्पष्टीकरण की आलोचना करने या अनुरोध करने के लिए किया जा सकता है। यह या तो एक टिप्पणी या एक [नया सवाल] होना चाहिए (http://stackoverflow.com/questions/ask)। –

+0

मैंने आपके उत्तर में प्रश्न को हटाने के लिए संपादित किया क्योंकि उत्तर केवल उत्तर प्रदान करना है। आप उस प्रश्न को टिप्पणी के रूप में या एक नए प्रश्न के रूप में पोस्ट कर सकते हैं। –

संबंधित मुद्दे