2016-04-29 5 views
7

नहीं ले रही मैं एक MultipartConfig एनोटेशन (एक टुकड़ा जिनमें से नीचे शो है) के साथ एक नियंत्रक है:SpringBoot के @MultipartConfig maxFileSize प्रभाव

@RestController 
@RequestMapping("packages") 
@MultipartConfig(maxFileSize = 1024*1024*1024, maxRequestSize = 1024*1024*1024) 
public class PackagesController 
{ 
    @RequestMapping(method = RequestMethod.POST) 
    public String create(@RequestParam("package") MultipartFile uploadedPackage) 
    { 
     // do stuff to the file 
     return "create"; 
    } 
} 

जब मैं इस endpoint लिए एक फ़ाइल अपलोड है, हालांकि, यह प्रतीत होता है डिफ़ॉल्ट बहुखण्डीय config मानों का उपयोग:

Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field package exceeds its maximum permitted size of 1048576 bytes. 
    at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.java:633) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 
    at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 
    at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 
    at java.io.FilterInputStream.read(FilterInputStream.java:107) ~[na:1.8.0_45] 
    at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:98) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 
    at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:68) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 
    at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:293) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 
    at org.apache.catalina.connector.Request.parseParts(Request.java:2776) ~[tomcat-embed-core-8.0.32.jar:8.0.32] 
    ... 30 common frames omitted 

मेरा आवेदन इस तरह दिखता है:

@SpringBootApplication 
public class Application { 

    public static void main(String[] args) { 
     ApplicationContext ctx = SpringApplication.run(Application.class, args); 
    } 

} 

क्या ऐसा कुछ है जो मुझे याद आ रहा है जो @MultipartConfig एनोटेशन प्रभावी होने की अनुमति देता है?

+0

मैं एक बीन एनोटेशन के साथ एक मल्टीपार्ट कॉन्फिग फैक्ट्री विधि के साथ एक अलग ऐपकॉन्फिग क्लास का उपयोग करके इसे प्राप्त करने में सक्षम था लेकिन मुझे अभी भी यकीन नहीं है कि यह ऊपर के रूप में मल्टीपार्ट कॉन्फिग एनोटेशन के साथ क्यों काम नहीं करता है। –

+1

'@ मल्टीपार्ट कॉन्फिग 'एक सर्वलेट एनोटेशन है। वसंत एमवीसी का कोई ज्ञान नहीं है। –

+1

मानक स्प्रिंग एमवीसी में मल्टीपार्ट प्रोसेसिंग को सक्षम करने के लिए [यहां] (http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-multipart) देखें। बूट के साथ, यह थोड़ा अलग है। –

उत्तर

11

यदि आप मल्टीपार्ट गुणों को नियंत्रित करना चाहते हैं, तो आप multipart.max-file-size और multipart.max-request-size गुणों का उपयोग कर सकते हैं। उदाहरण के लिए, यदि आप अपने application.properties फ़ाइल में विन्यास का टुकड़ा निम्न को जोड़कर 100Mb को अधिकतम आकार बढ़ा सकता है:

multipart.max-file-size=100MB 
multipart.max-request-size=100MB 

मान प्रत्यय MB या KB एक मेगाबाइट या किलोबाइट आकार इंगित करने के लिए उपयोग कर सकते हैं।

हुड के अंतर्गत, स्प्रिंग बूट पैदा करेगा एक MultipartConfigElementMultipartProperties पर आधारित है और के रूप में Spring MVC documentation में कहा गया है कि MultipartConfigElement, सर्वलेट पंजीकरण में उपयोग किया जाएगा। अधिक जानकारी के लिए आप MultipartAutoConfiguration और DispatcherServletConfiguration और चेकआउट Spring Boot documentation पर एक नज़र डाल सकते हैं।

+3

यह ध्यान दिया जाना चाहिए कि इसका उपयोग तब किया जाना चाहिए जब वसंत बूट का संस्करण 1.4 से कम हो। यदि यह 1.4 या उच्चतर है, तो गुणों का दूसरा सेट उपयोग किया जाना चाहिए (@ टीबो के उत्तर में)। – cst1992

13

वसंत-बूट के साथ 1.5.3 आप अपने YAML फ़ाइल में रिक्त स्थान है और टैब का उपयोग सुनिश्चित करें application.yml

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

में निम्न कोड का उपयोग करना चाहिए।

6

बहुखण्डीय अपलोड करने के लिए कस्टम सीमा सेट के लिए, नीचे गुण प्रयोग की जाने वाली है (30MB का एक नमूना आकार के लिए):

spring.http.multipart.max-file-size=30MB 
spring.http.multipart.max-request-size=30MB 

हमारी कंपनी के परियोजनाओं में, मैंने पाया कि उनमें से एक स्प्रिंग बूट पर था संस्करण 1.3.5, इसलिए संस्करणों के लिए < 1.4 आप docs(v1.4.0) से

multipart.max-file-size=30MB 
multipart.max-request-size=30MB 

उपयोग करना चाहिए:

स्प्रिंग बूट Servlet 3 javax.servlet.http.Part एपीआई समर्थन अपलोड करने वाली फ़ाइलों को गले लगाता है। डिफ़ॉल्ट रूप से स्प्रिंग बूट स्प्रिंग एमवीसी को प्रति फ़ाइल 1 एमबी की अधिकतम फ़ाइल और एक ही अनुरोध में अधिकतम 10 एमबी फ़ाइल डेटा के साथ कॉन्फ़िगर करता है। आप इन मानों को ओवरराइड कर सकते हैं, साथ ही साथ स्थान, जिसमें इंटरमीडिएट डेटा संग्रहीत किया जाता है (उदा।, /tmp निर्देशिका) और MultipartProperties कक्षा में प्रकट संपत्तियों का उपयोग करके डेटा को द्वारा डिस्क पर फ़्लश किया गया था। यदि आप निर्दिष्ट करना चाहते हैं कि फ़ाइलें असीमित हों, उदाहरण के लिए, spring.http.multipart.max-file-size संपत्ति -1 पर सेट करें।जब आप एक वसंत MVC नियंत्रक हैंडलर विधि में टाइप MultipartFile के @RequestParam -annotated पैरामीटर के रूप में बहुखण्डीय इनकोडिंग फ़ाइल डेटा प्राप्त करना चाहते हैं

बहुखण्डीय समर्थन उपयोगी है। संस्करण 1.3.8 के लिए

ही डॉक्स:

आप निर्दिष्ट करने के लिए है कि फाइलों असीमित हो चाहते हैं, उदाहरण के लिए, multipart.maxFileSize संपत्ति -1 करने के लिए सेट।

2

स्प्रिंग बूट 2.0 के साथ, आप documentation से अपने application.yml

spring: 
    servlet: 
    multipart: 
     max-file-size: 100MB 
     max-request-size: 100MB 

में इस का उपयोग करना चाहिए:

स्प्रिंग बूट सर्वलेट 3 javax.servlet.http.Part एपीआई को गले लगाती है फ़ाइलों को अपलोड करने का समर्थन करने के। डिफ़ॉल्ट रूप से, स्प्रिंग बूट स्प्रिंग एमवीसी को अधिकतम आकार 1 एमबी प्रति फ़ाइल और अधिकतम अनुरोध के साथ अधिकतम 10MB फ़ाइल अनुरोध के साथ स्प्रिंग एमवीसी को कॉन्फ़िगर करता है। आप इन मानों को ओवरराइड कर सकते हैं, जिस स्थान पर इंटरमीडिएट डेटा संग्रहीत किया जाता है (उदाहरण के लिए, /tmp निर्देशिका में), और MultipartProperties कक्षा में प्रकट संपत्तियों का उपयोग करके डेटा को डेटा पर फ़्लश किया गया था। उदाहरण के लिए, यदि आप निर्दिष्ट करना चाहते हैं कि फ़ाइलें असीमित हों, तो spring.servlet.multipart.max-file-size प्रॉपर्टी -1 पर सेट करें।

Appendix A of documentation

spring.servlet.multipart.max-फ़ाइल-आकार = 1 एमबी # फ़ाइल का अधिकतम आकार से निकाले गए। मान क्रमशः मेगाबाइट्स या किलोबाइट इंगित करने के लिए प्रत्यय "एमबी" या "केबी" का उपयोग कर सकते हैं।

spring.servlet.multipart.max-request-size = 10MB # अधिकतम अनुरोध आकार। मान क्रमशः मेगाबाइट्स या किलोबाइट इंगित करने के लिए प्रत्यय "एमबी" या "केबी" का उपयोग कर सकते हैं।

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