ile birden fazla dosya ve meta veri yükleme CXF ile bir REST web hizmeti olarak bir dosya yükleme işleyicisi oluşturmam gerekiyor. Ben meta verileri aşağıdaki gibi kod kullanarak tek bir dosya yüklemek mümkün oldum: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();
}
Şimdi aynı istekte birden fazla dosya yükleme desteği eklemek gerekir. Bu durumda, image/jpeg
içerik türü ile bir ek yerine, ihtiyacım olan bireysel image/jpeg
eklerini içeren multipart/mixed
içerik türünde bir ek alırım.
Birden çok JSON veya JAXB nesnesini meta verilerle karşıya yüklerken örnekler gördüm, ancak ikili görüntü verileriyle çalışmak için hiçbir şey alamadım. Doğrudan MultipartBody kullanmayı denedim, ancak içinde gömülü image/jpeg
eklerini değil, yalnızca multipart/mixed
ekini döndürür.
Katıştırılmış ekleri almak için yinelemeli olarak multipart/mixed
ekini ayrıştırma yolu var mı? Tabii ki multipart/mixed
ekinin giriş akışını alabilirim ve dosyaları kendim ayrıştırabilirim, ama daha iyi bir yol olduğunu umuyorum.
GÜNCELLEME
Bu kludgey görünüyor, ama aşağıdaki kod bit şu an için yeterli olduğunu. Yine de daha iyi bir yol görmeyi çok isterim.
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());
}
}
parametreyi tanımlamaya çalıştık bu yardımcı yöntemini kullanarak kolayca dönüştürülebilir akışları yerine güle dizileri tercih ederse final @Multipart ("image") List görüntülerini nasıl buldunuz ya da içerik türleriyle ilgili daha fazla sorun mu var? –
AxelTheGerman
@axel Ekler listesine Çok Komutlu bir açıklama eklediğimde CXF sadece boş bir değer iletir. Görüntüleri elde etmek için onu undecorated bırakmak zorundayım. –