2012-01-31 15 views
63

साथ HTTP पोस्ट मल्टीपार्ट मैं एक HTTP पोस्ट मल्टीपार्ट जो केवल 2 पैरामीटर शामिल हों प्राप्त करने की आवश्यकता शरीर को सेट करने के लिए? मैं क्रोम रीस्ट कंसोल का उपयोग कर HTTP कॉल का परीक्षण करने जा रहा हूं, इसलिए मुझे आश्चर्य है कि सही समाधान JSON पैरामीटर और बाइनरी फ़ाइल के लिए "लेबल" कुंजी सेट करना है या नहीं।बाकी JSON

@POST 
@Consumes("multipart/form-data") 
public String postWithPhoto(MultipartFormDataInput multiPart) { 
    Map <String, List<InputPart>> params = multiPart.getFormDataMap(); 
    String myJson = params.get("myJsonName").get(0).getBodyAsString(); 
    InputPart imagePart = params.get("photo").get(0); 
    //do whatever I need to do with my json and my photo 
} 

इस जाने का रास्ता है:

सर्वर साइड मैं Resteasy 2.x उपयोग कर रहा हूँ, और मैं इस तरह मल्टीपार्ट शरीर को पढ़ने के लिए जा रहा हूँ? क्या कुंजी "myJsonName" का उपयोग करके मेरी JSON स्ट्रिंग को पुनर्प्राप्त करना सही है जो उस विशेष सामग्री-स्वभाव की पहचान करता है? क्या इन 2 सामग्री को एक HTTP मल्टीपार्ट अनुरोध में प्राप्त करने का कोई अन्य तरीका है?

अग्रिम

+1

यह किस तरह का आरईएसटी संसाधन है? दो भागों संसाधन स्तर पर कैसे संबंधित हैं? –

+0

वास्तव में जिस तरह से हमने इस संसाधन को संभाला है वह पूरी तरह से विश्वसनीय नहीं है क्योंकि छवि किसी अन्य संसाधन के बजाय संसाधन का "घटक" है। – thermz

उत्तर

118

अगर मैं तुम्हें सही ढंग से समझ में धन्यवाद, आप एक HTTP/बाकी कंसोल से मैन्युअल रूप से एक बहुखण्डीय अनुरोध रचना करना चाहते हैं। मल्टीपार्ट प्रारूप सरल है; एक संक्षिप्त परिचय in the HTML 4.01 spec पाया जा सकता है। आपको सीमा के साथ आने की जरूरत है, जो सामग्री में एक स्ट्रिंग नहीं है, मान लें कि HereGoes। आप अनुरोध हेडर Content-Type: multipart/form-data; boundary=HereGoes सेट करते हैं। फिर यह एक वैध अनुरोध निकाय होना चाहिए:

--HereGoes 
Content-Disposition: form-data; name="myJsonString" 
Content-Type: application/json 

{"foo": "bar"} 
--HereGoes 
Content-Disposition: form-data; name="photo" 
Content-Type: image/jpeg 
Content-Transfer-Encoding: base64 

<...JPEG content in base64...> 
--HereGoes-- 
+1

यह वही है जो मुझे पढ़ने की जरूरत है :-) धन्यवाद – thermz

+0

आप वास्तव में साबुन-यूई में भी लगाव जोड़ सकते हैं। यह वास्तविक पोस्ट बॉडी और सामग्री-प्रकार में गुजरने के लिए कम करता है। –

+0

शानदार स्पष्टीकरण! – abbasdgr8

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