2015-10-09 3 views
7

मैं किसी सर्वर को फ़ाइल अपलोड करने का प्रयास कर रहा हूं, इसलिए मैं फ़ाइल का डेटा प्राप्त करने के लिए @RequestBody का उपयोग करने का प्रयास कर रहा हूं, लेकिन फ़ाइल अपलोड करने का प्रयास करते समय मुझे 415 त्रुटि कोड मिल रहा है।जावा में अनुरोधबॉडी से हमें फ़ाइल डेटा क्यों नहीं मिल सकता है?

तो मैंने गुगल किया है (फ़ाइल अपलोड करने का समाधान मिला है) और मुझे पता चला है कि मुझे अनुरोध निकाय से फ़ाइल डेटा नहीं मिल सकता है। तो मैं जानना चाहता हूं कि हम अनुरोध निकाय से फ़ाइल डेटा क्यों नहीं पहुंच सकते हैं क्योंकि HTTP अनुरोधों में अनुरोध निकाय में डेटा भेजा जाएगा, इसलिए मैं जानना चाहता हूं कि फाइल अपलोड करने के मामले में अनुरोध कैसे हो रहा है।

मेरे सर्वर कोड से पहले:

@RequestMapping(value = "/upload",headers = "Content-Type=multipart/form-data", method = RequestMethod.POST) 
@ResponseBody 
public String upload(@RequestBody MultipartFile file) 
{ 
} 

समाधान:

@RequestMapping(value = "/upload",headers = "Content-Type=multipart/form-data", method = RequestMethod.POST) 
@ResponseBody 
public String upload(MultipartHttpServletRequest request) 
{ 
} 
+0

इस प्रयास करें .. @RequestMapping (value = "/ अपलोड", हेडर = "सामग्री प्रकार = बहुखण्डीय/फार्म-डेटा", विधि = RequestMethod.POST) @ResponseBody सार्वजनिक स्ट्रिंग अपलोड (@RequestParam ("फाइल") मल्टीपार्टफाइल अपलोडफाइल) { } –

+0

मुझे पता है कि यह काम करेगा मैं जानना चाहता हूं कि हम इसे @RequestBody से क्यों नहीं प्राप्त कर सकते – Labeo

उत्तर

5

तकनीकी रूप से आप अपना खुद का HttpMessageConverter लिख सकते हैं जो पूर्ण मल्टीपार्ट अनुरोध निकाय को पार्स करेगा, लेकिन आपको एक बहुत ही विशिष्ट लक्ष्य प्रकार होना चाहिए जो सभी भागों को संभाल सके।

आप एक विधि पैरामीटर का संकेत शरीर वेब अनुरोध के करने के लिए बाध्य किया जाना चाहिए की @RequestBody

एनोटेशन जावाडोक से ध्यान देंगे।

कि इरादा अनुरोध निकाय की विधि को विधि पैरामीटर में बांधना है। आप मल्टीपार्ट अनुरोध के प्रत्येक भाग को एक पैरामीटर में कैसे बाध्य करते हैं? कुछ MultiValueMap<String, Object> (which is what FormHttpMessageConverter uses when writing a multipart request) की तरह कुछ। लेकिन यह बहुत उपयोगी नहीं होगा क्योंकि आपको प्रत्येक मान के प्रकार की जांच करनी होगी।

डेवलपर के रूप में आपको जो कुछ चाहिए उसे निर्दिष्ट करने के लिए यह अधिक समझ में आता है। यही कारण है कि @RequestParam और @RequestPart उपलब्ध हैं।

3

क्योंकि फ़ाइलें अनुरोध शरीर नहीं हैं, वे इसका हिस्सा हैं और कोई अंतर्निहित HttpMessageConverter परिवर्तित कर सकते हैं कि मल्टीपार्टफाइल की सरणी के लिए अनुरोध। यही कारण है कि यह काम करता है @RequestParam("file") MultipartFile[] files

बजाय

@RequestBody MultipartFile file 

यह मदद करता है उम्मीद है कि।

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