2015-01-27 8 views
11

के हिस्से के रूप में स्प्रिंग बूट मल्टीपार्ट फ़ाइल अपलोड करें, मैं जानना चाहता हूं कि पोस्ट एंडपॉइंट होना संभव है या नहीं, जो एक जेएसएस पेलोड स्वीकार कर सकता है जिसमें मल्टीपार्टफाइल और साथ ही अन्य डेटा भी शामिल है। जैसे मेरा शरीर वस्तु देखने की तरह हैं: एक अलग लेकिन संबंधित प्रश्नजेसन बॉडी

public class Bio { 
    private Long id; 
    private String firstName; 
    private MultipartFile imageFile; 
} 

है कि एक फ़ाइल, https://spring.io/guides/gs/uploading-files/ अपलोड करने के लिए springboot डॉक उदाहरण में, फ़ाइल पेलोड अनुरोध पथ के बजाय का हिस्सा है। यह मेरे लिए अजीब लगता है तो क्या अनुरोध निकाय निकाय फाइल को बांधने का कोई तरीका है?

उत्तर

11

जिस तरह से मैंने इसे पहले किया है, वह दो अलग-अलग हिस्सों को अपलोड करना है, एक फ़ाइल के लिए और एक साथ जेएसओएन के लिए। आपका नियंत्रक विधि कुछ इस तरह दिखेगा:

public void create(@RequestPart("foo") Foo foo, 
     @RequestPart("image") MultipartFile image) 
    // … 
} 

यह तो अनुरोध करता है कि इस तरह दिखना का उपभोग होगा:

Content-Type: multipart/mixed; boundary=6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm 
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm 
Content-Disposition: form-data; name="foo" 
Content-Type: application/json;charset=UTF-8 
{"a":"alpha","b":"bravo"} 
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm 
Content-Disposition: form-data; name="image"; filename="foo.png" 
Content-Type: application/octet-stream 
Content-Length: 734003 
<binary data> 
--6o2knFse3p53ty9dmcQvWAIx1zInP11uCfbm-- 
+0

अच्छा। इस उत्तर के लिए धन्यवाद –

5

एंडी समाधान का उपयोग करने @RequestPart पूरी तरह से काम किया। लेकिन पोस्टमैन के साथ प्रमाणित करने में सक्षम नहीं है, क्योंकि यह समर्थन नहीं लगता है, प्रत्येक मल्टीपार्ट के सामग्री प्रकार को निर्दिष्ट करने के लिए सीमाओं को सही ढंग से सेट करने के लिए निर्दिष्ट करता है।

तो कर्ल कमांड का उपयोग करके एक पेलोड और फ़ाइल दोनों को संलग्न करने के लिए, ऐसा कुछ काम करेगा।

curl -i -X POST -H "Content-Type: multipart/mixed" \ 
-F "somepayload={\"name\":\"mypayloadname\"};type=application/json" \ 
-F "[email protected]" http://localhost:8080/url 

सुनिश्चित करें कि आप पेलोड सामग्री से बचने और somevalid.zip समान निर्देशिका जहां कर्ल निष्पादित किया जाता है में हो या फाइल करने के लिए मान्य पथ से बदलने चाहिए बनाओ।

+2

दोनों पोस्टमैन और कर्ल के लिए मुझे मिलता है: '{" टाइमस्टैंप ": 147195864771 9," स्थिति ":" त्रुटि "," डेटा ":" सामग्री प्रकार 'एप्लिकेशन/ऑक्टेट-स्ट्रीम' समर्थित नहीं है "}' – Derp

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