2012-08-23 21 views
7

Ho progettato un servizio in più parti Jersey resto come qui sotto per ricevere una richiesta di più parti (il caricamento di file) e salvare il file in una posizione del disco:Jersey Multipart client Carica

@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; 

    } 

e il mio client di prova è:

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); 

Ma non sono in grado di ottenere la risposta.

Funziona perfettamente quando sto utilizzando la pagina Web HTML come client per caricare i file chiamando il servizio REST ma dal client REST non funziona.

C'è qualcosa che deve essere cambiato nel client?

risposta

1

Quando dici che non sei in grado di ottenere una risposta, cosa intendi esattamente?

Se si invia un file, si può provare con questo?

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

Inoltre,

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

non deve essere denominato "file", ma "nomefile", per esempio.

Per il debug, vorrei consigliarvi di ascoltare sul vostro server usando Wireshark.

+0

qualcuno mi può aiutare ad aggiungere nuova intestazione per il client di prova di cui sopra codice? – cxyz

11

La soluzione a questo, se non si dispone di un file, ma alcuni String o giù di lì, è quello di fare qualcosa di simile:

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); 
Problemi correlati