साथ एक से अधिक फ़ाइलों और मेटाडाटा अपलोड कर रहा है मैं CXF के साथ एक बाकी वेब सेवा के रूप में एक फ़ाइल अपलोड हैंडलर बनाना होगा। मैं निम्नलिखित की तरह कोड का उपयोग मेटाडाटा के साथ एक एकल फाइल अपलोड करने में सक्षम किया गया है:CXF
@POST
@Path("/uploadImages")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public Response uploadImage(@Multipart("firstName") String firstName,
@Multipart("lastName") String lastName,
List<Attachment> attachments) {
for (Attachment att : attachments) {
if (att.getContentType().getType().equals("image")) {
InputStream is = att.getDataHandler().getInputStream();
// read and store image file
}
}
return Response.ok().build();
}
अब मैं एक ही अनुरोध में एक से अधिक फ़ाइलों को अपलोड करने के लिए समर्थन जोड़ने की जरूरत है। इस मामले में, image/jpeg
सामग्री प्रकार के साथ में अनुलग्नक के बजाय, मैं multipart/mixed
सामग्री प्रकार, जो अपने आप अलग-अलग image/jpeg
संलग्नक है कि मैं की आवश्यकता होती है के साथ एक अनुलग्नक मिलता है।
मैं कई JSON अपलोड या JAXB मेटाडाटा के साथ वस्तुओं के लिए उदाहरण देखा है, लेकिन मैं द्विआधारी छवि डेटा के साथ काम करने के लिए कुछ भी प्राप्त करने में सक्षम नहीं किया गया है। मैं सीधे MultipartBody उपयोग करने की कोशिश की है, लेकिन यह केवल multipart/mixed
अटैचमेंट है, न image/jpeg
संलग्नक के भीतर एम्बेडेड देता है।
वहाँ एक रास्ता रिकर्सिवली एम्बेडेड संलग्नक पाने के लिए एक multipart/mixed
लगाव पार्स करने के लिए है? मैं निश्चित रूप से multipart/mixed
लगाव के इनपुट स्ट्रीम प्राप्त कर सकते हैं और अपने आप को पार्स आउट फ़ाइलें, लेकिन मैं आशा करती हूं कि वहाँ एक बेहतर तरीका है।
अद्यतन
इस kludgey लगता है, लेकिन कोड की निम्न बिट अब के लिए काफी अच्छा है। हालांकि मुझे एक बेहतर तरीका देखना अच्छा लगेगा।
for (Attachment att : attachments) {
LOG.debug("attachment content type: {}", att.getContentType().toString());
if (att.getContentType().getType().equals("multipart")) {
String ct = att.getContentType().toString();
Message msg = new MessageImpl();
msg.put(Message.CONTENT_TYPE, ct);
msg.setContent(InputStream.class, att.getDataHandler().getInputStream());
AttachmentDeserializer ad = new AttachmentDeserializer(msg, Arrays.asList(ct));
ad.initializeAttachments();
// store the first embedded attachment
storeFile(msg.getContent(InputStream.class));
// store remaining embedded attachments
for (org.apache.cxf.message.Attachment child : msg.getAttachments()) {
storeFile(child.getDataHandler().getInputStream());
}
}
else if (att.getContentType().getType().equals("image")) {
storeFile(att.getDataHandler().getInputStream());
}
}
आप पैरामीटर को परिभाषित करने की कोशिश की है का उपयोग कर परिवर्तित किया जा सकता पसंद करते हैं अंतिम @ मल्टीपार्ट ("छवि") की तरह सूची छवियां या सामग्री प्रकारों के साथ यह एक समस्या है? –
AxelTheGerman
@axel अगर मैं अनुलग्नक सूची में एक मल्टीपार्ट एनोटेशन जोड़ता हूं तो सीएक्सएफ सिर्फ एक शून्य मान पास करता है। मुझे छवियों को पाने के लिए इसे अव्यवस्थित छोड़ना है। –