2013-07-04 10 views
20

मैंने वसंत 3 आराम मल्टीपार्ट फ़ाइल अपलोड के लिए एक पीओसी किया था। यह ठीक काम कर रहा है। लेकिन जब मैंने अपने आवेदन के साथ एकीकृत करने की कोशिश की तो मुझे मुद्दों का सामना करना पड़ रहा है।स्प्रिंग रीस्ट: अनुरोध अस्वीकार कर दिया गया था क्योंकि कोई मल्टीपार्ट सीमा नहीं मिली

यह निम्नलिखित अपवाद फेंकता है:

org.springframework.web.multipart.MultipartException: Could not parse multipart servlet request; 
nested exception is org.apache.commons.fileupload.FileUploadException: 
the request was rejected because no multipart boundary was found**" 

कृपया मुझे बताएं कि मैं अपने कोड के किसी भी हिस्से में गलत हूँ करते हैं।

बीन्स:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
<property name="order" value="1" /> 
<property name="mediaTypes"> 
<map> 
    <entry key="json" value="application/json" /> 
    <entry key="xml" value="application/xml" /> 
    <entry key="file" value="multipart/mixed" /> 
</map> 
</property> 
</bean> 
<!-- multipart resolver --> 
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 
    <!-- one of the properties available; the maximum file size in bytes --> 
    <property name="maxUploadSize" value="50000000" /> 
</bean> 

नियंत्रक:

@Controller 
public class MultipleFilesRecieve { 
    @RequestMapping (value = "/saveMultiple", method = RequestMethod.POST) 
     public String save(FileUploadForm uploadForm) { 
     List<MultipartFile> files = uploadForm.getFiles(); 
     List<String> fileNames = new ArrayList<String>(); 
     if (null != files && files.size() > 0) { 
      for (MultipartFile multipartFile : files) { 
       String fileName = multipartFile.getOriginalFilename(); 
       fileNames.add(fileName); 
      } 
     } 
     return "multifileSuccess"; 
    } 
} 

उत्तर

25

समस्या अपने कोड में नहीं है - यह अपने अनुरोध में है। आप अपने मल्टीपार्ट अनुरोध में सीमा खो रहे हैं। के रूप में यह specification में कहा:

सामग्री प्रकार क्षेत्र बहुखण्डीय संस्थाओं के लिए एक पैरामीटर, "सीमा" है, जो कैप्सूलीकरण सीमा निर्दिष्ट करने के लिए प्रयोग किया जाता है की आवश्यकता है। encapsulation सीमा को एक पंक्ति के रूप में परिभाषित किया गया है जिसमें पूरी तरह से दो हाइफ़न वर्ण ("-", दशमलव कोड 45) शामिल हैं, जिसके बाद सामग्री-प्रकार शीर्षलेख फ़ील्ड से सीमा पैरामीटर मान होता है।

This और this पदों को भी सहायक होना चाहिए।

+0

हे @ sermolaev, क्या आप सीमा मूल्य का एक उदाहरण दे सकते हैं? –

0

क्या आप कोई सुरक्षा फ़िल्टर उपयोग कर रहे हैं? सुरक्षा समस्या श्रृंखला को हटाकर मेरी समस्या हल हो गई थी। इस से:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(this.springSecurityFilterChain).build(); 
इस के लिए

: https://jira.spring.io/browse/SPR-12114

0

@sermolaev सही उसके जवाब में है:

this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build(); 

मैं एक मुद्दा है जहाँ मैं विवरण समझाने खोला।

मैं इस समस्या से संबंधित अपने अनुभव को साझा करना चाहता हूं। मुझे पोस्टमैन में इस समस्या का सामना करना पड़ा है, लेकिन मैं लंबे समय तक इसके मूल कारण को समझ नहीं पाया। मेरा अनुरोध टेम्पलेट सही कारण प्रतीत होता है पोस्टमैन में boundary शामिल है ...

आखिरकार मुझे पता चला है कि जब आप Content-Type=multipart/form शीर्षलेख अपने आप से निर्दिष्ट कर रहे हैं, तो यह पोस्टमैन द्वारा स्वचालित रूप से जोड़े गए एक को ओवरराइड करता है। और यह आपके जैसा ही त्रुटि की ओर जाता है। मेरा समाधान Content-Type शीर्षलेख को हटाने के समान सरल था।

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

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