2012-08-23 39 views
7

he diseñado un servicio Jersey RESTO de varias partes de la siguiente manera para recibir una petición de varias partes (la carga de archivos) y guardar el archivo en una ubicación del disco:Jersey multiparte cliente Subir

@POST 
    @Path("/Upload") 
    @Produces(MediaType.TEXT_HTML) 
    @Consumes(MediaType.MULTIPART_FORM_DATA) 
    public String uploadFile(@FormDataParam("file") InputStream inputStream, 
      @FormDataParam("file") FormDataContentDisposition contentDisposition) { 

     System.out.println("Method Entry"); 
     System.out.println(contentDisposition.getFileName()); 


     String result = "not Success"; 
     File file = null; 
     if (contentDisposition != null 
       && contentDisposition.getFileName() != null 
       && contentDisposition.getFileName().trim().length() > 0) { 
      try { 
       file = new File("xx" 
         + contentDisposition.getFileName()); 
       new File("yy").mkdirs(); 
       file.createNewFile(); 
       OutputStream outputStream = new FileOutputStream(file); 
       int read = 0; 
       byte[] bytes = new byte[1024]; 

       while ((read = inputStream.read(bytes)) != -1) { 
        outputStream.write(bytes, 0, read); 
       } 
       outputStream.flush(); 
       outputStream.close(); 
       result = "success"; 

      } catch (Exception e) { 

       System.out.println(e.toString()); 
      } 
     } 
     System.out.println("Method Exit"); 
     return result; 

    } 

y mi cliente de prueba es:

Client client = Client.create(); 
    WebResource resource = client 
      .resource("xyz"); 
    String conString = "This is the content"; 

    FormDataMultiPart formDataMultiPart = new FormDataMultiPart(); 
    formDataMultiPart.field("file", "Testing.txt"); 

    FormDataBodyPart bodyPart = new FormDataBodyPart("file", 
      new ByteArrayInputStream(conString.getBytes()), 
      MediaType.APPLICATION_OCTET_STREAM_TYPE); 
    formDataMultiPart.bodyPart(bodyPart); 

    String reString = resource.type(MediaType.MULTIPART_FORM_DATA) 
      .accept(MediaType.TEXT_HTML) 
      .post(String.class, formDataMultiPart); 
    System.out.println(reString); 

Pero no puedo obtener la respuesta.

Está funcionando perfectamente cuando uso la página HTML como cliente para cargar los archivos llamando al servicio REST pero desde el cliente REST no está funcionando.

¿Hay algo que deba cambiarse en el cliente?

Respuesta

1

Cuando dice que no puede obtener una respuesta, ¿a qué se refiere exactamente?

Si envía un archivo, ¿puede intentarlo?

FileDataBodyPart fdp = new FileDataBodyPart("file",f,MediaType.APPLICATION_OCTET_STREAM_TYPE); 

Además,

formDataMultiPart.field("file", "Testing.txt"); 

no debería ser llamado "archivo", pero "Nombre de archivo", por ejemplo.

Para la depuración, le aconsejo que escuche en su servidor con Wireshark.

+0

¿Puede alguien ayudarme en la adición de nueva cabecera para el cliente de prueba anterior ¿código? – cxyz

11

La solución a esto, si usted no tiene un archivo, pero algunos de cuerdas o menos, es hacer algo como esto:

final FormDataMultiPart formDataMultiPart = new FormDataMultiPart(); 
final String value = "Hello World"; 
final FormDataContentDisposition dispo = FormDataContentDisposition// 
     .name("file")// 
     .fileName("test.txt")// 
     .size(value.getBytes().length)// 
     .build(); 
final FormDataBodyPart bodyPart = new FormDataBodyPart(dispo, value); 
formDataMultiPart.bodyPart(bodyPart); 
Cuestiones relacionadas