2016-07-14 2 views
0

Я пытаюсь опубликовать форму, содержащую файл, а также обычные текстовые данные. Я использую Apache CXF для этого. Ниже приведен кодПубликация формы с использованием apache cxf

WebClient client= WebClient.create(ROOT_URL_FILE_SERVICE); 

     client.type("multipart/form-data");  
     InputStream is= new ByteArrayInputStream(getBytes());  
     List<Attachment> attachments= new ArrayList(); 
     ContentDisposition cd = new ContentDisposition("attachment;filename=image.jpg"); 
     Attachment att= new Attachment("File", is, cd); 
     Attachment pageNumber= new Attachment("DATA1", MediaType.TEXT_PLAIN, "1"); 
     Attachment OutputType= new Attachment("DATA2", MediaType.TEXT_PLAIN, "2"); 

     attachments.add(att); 
     attachments.add(pageNumber); 
     attachments.add(OutputType); 
     MultipartBody body= new MultipartBody(attachments); 

     Response res=client.post(body); 

Я не могу ничего получить (файл, DATA1, DATA2) на стороне сервера.

Что мне нужно изменить в приведенном выше коде, чтобы заставить его работать.

ответ

2

Проверьте конфигурацию сервера cxf на стороне сервера, как показано ниже.

@POST 
@Path("/upload") 
@Produces(MediaType.TEXT_XML) 
public String upload(
     @Multipart(value = "File", type = MediaType.APPLICATION_OCTET_STREAM) final InputStream fileStream, 
     @Multipart(value = "DATA1", type = MediaType.TEXT_PLAIN) final String fileNumber, 
     @Multipart(value = "DATA2", type = MediaType.TEXT_PLAIN) final String outputType) { 
    BufferedImage image; 
    try { 
     image = ImageIO.read(fileStream); 
     LOG.info("Received Image with dimensions {}x{} ", image.getWidth(), image.getHeight()); 
    } catch (IOException e) { 
     LOG.error(e.getMessage(), e); 
    } 

    LOG.info("Received Multipart data1 {} ", fileNumber); 
    LOG.info("Received Multipart data2 {} ", outputType); 
    return "Recieved all data"; 
} 

Испытанный файл клиента

public static void main(String[] args) throws IOException { 

      WebClient client = WebClient.create("http://localhost:8080/services/kp/upload"); 
      ClientConfiguration config = WebClient.getConfig(client); 
      config.getInInterceptors().add(new LoggingInInterceptor()); 
      config.getOutInterceptors().add(new LoggingOutInterceptor()); 
      client.type("multipart/form-data"); 
      InputStream is = FileUtils.openInputStream(new File("vCenter_del.jpg")); 
      List<Attachment> attachments = new ArrayList<>(); 
      ContentDisposition cd = new ContentDisposition("attachment;filename=image.jpg"); 
      Attachment att = new Attachment("File", is, cd); 
      Attachment pageNumber = new Attachment("DATA1", MediaType.TEXT_PLAIN, "1"); 
      Attachment OutputType = new Attachment("DATA2", MediaType.TEXT_PLAIN, "2"); 

      attachments.add(att); 
      attachments.add(pageNumber); 
      attachments.add(OutputType); 
      MultipartBody body = new MultipartBody(attachments); 

      Response res = client.post(body); 

      String data = res.readEntity(String.class); 
      System.out.println(data); 
     } 

ПРИМЕЧАНИЕ: Короче говоря, если есть несоответствие содержимого ид, что, если файл, data1 или тип содержимого, сервер не может Получать данные в обоих случаев вы получите соответствующую ошибку, например 400 и 415 соответственно.