2015-01-09 21 views
5

Sto tentando di caricare l'immagine utilizzando il servizio web Jersey, sto utilizzando il client jersey per caricare l'immagine. di seguito è il servizio web jersey che prende inputstream e carica l'immagine sul server. funziona benissimo quando mi chiamano direttamente utilizzando jsp multipart caricati forma, ma non riesce quando ho caricare le immagini utilizzando il client magliaJersey Image Upload Client

@POST 
@Path("/upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public Response uploadFile(
     @FormDataParam("file") InputStream uploadedInputStream, 
     @FormDataParam("file") FormDataContentDisposition fileDetail) throws ServiceException 
{ 
    // upload code 
} 

Di seguito Jersey client per caricare immagine, il codice del client è parte di un altro servizio web che viene chiamato da php rest client e questo client jersey chiamano il servizio web jersey per caricare l'immagine, se io chiamano direttamente il servizio web jersey per caricare l'immagine che funziona bene, ma non funziona quando carico utilizzando client jersey.

ClientConfig config = new DefaultClientConfig(); 
Client client = Client.create(config); 
client.setChunkedEncodingSize(1024); 
WebResource wr = client 
     .resource("http://localhost:8080/rest/upload"); 

String contentDisposition = "attachment; filename=\"" 
     + fileDetail.getName() + "\""; 
FormDataMultiPart form = new FormDataMultiPart(); 
ContentDisposition contentDisposition2 = new ContentDisposition(contentDisposition); 
form.setContentDisposition(contentDisposition2); 
FormDataBodyPart fdp = new FormDataBodyPart("file", 
     uploadedInputStream, MediaType.MULTIPART_FORM_DATA_TYPE); 
form.bodyPart(fdp); 
ClientResponse response = wr.type(MediaType.MULTIPART_FORM_DATA).post(
     ClientResponse.class, form) 

Per favore aiutatemi a capire cosa mi manca qui. Grazie.

+0

Può chiarire che cosa "non funziona" si intende? Ho provato con il tuo codice esatto, usando il tipo 'FileInputStream' per' uploadInputStream' e funziona perfettamente. Una cosa che cambierei (anche se non ha causato il suo fallimento) è 'MediaType.MULTIPART_FORM_DATA_TYPE' per' fdp' a 'MediaType.APPLICATION_OCTET_STREAM_TYPE' –

+0

Voglio dire che sta passando uploadInputStream a jersey webservice ma non contiene stesso pezzi e lo stesso tipo di contenuto che abbiamo passato dal client jersey. –

+0

form-data è il tipo di contenuto principale della richiesta. Ma i dati del modulo vengono forniti con parti e ogni parte ha il proprio tipo di contenuto. Il file dovrebbe essere ottetto-stream e non form-data –

risposta

10

questo esempio completo caricamento delle immagini utilizzando il client jersey e webservice si codice client

public class Test { 

    private static URI getBaseURI() { 
     return UriBuilder.fromUri("http://localhost:8080/restfullwebservice/resources/generic").build(""); 
    } 

    public static void main(String[] args) throws FileNotFoundException { 
     final ClientConfig config = new DefaultClientConfig(); 
     final Client client = Client.create(config); 

     final WebResource resource = client.resource(getBaseURI()).path("upload"); 

     final File fileToUpload = new File("C:/Users/Public/Pictures/Desert.jpg"); 

     final FormDataMultiPart multiPart = new FormDataMultiPart(); 
     if (fileToUpload != null) { 
      multiPart.bodyPart(new FileDataBodyPart("file", fileToUpload, 
        MediaType.APPLICATION_OCTET_STREAM_TYPE)); 
     } 

     final ClientResponse clientResp = resource.type(
       MediaType.MULTIPART_FORM_DATA_TYPE).post(ClientResponse.class, 
       multiPart); 
     System.out.println("Response: " + clientResp.getClientResponseStatus()); 

     client.destroy(); 
    } 
} 

tuo webservice

@POST 
@Path("upload") 
@Consumes(MediaType.MULTIPART_FORM_DATA) 
public void uploadFile(@FormDataParam("file") InputStream uploadedInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) throws ServiceChannelException { 
    OutputStream os = null; 
    try { 
     File fileToUpload = new File("C:/Users/Public/Pictures/Desert1.jpg"); 
     os = new FileOutputStream(fileToUpload); 
     byte[] b = new byte[2048]; 
     int length; 
     while ((length = uploadedInputStream.read(b)) != -1) { 
      os.write(b, 0, length); 
     } 
    } catch (IOException ex) { 
     Logger.getLogger(GenericResource.class.getName()).log(Level.SEVERE, null, ex); 
    } finally { 
     try { 
      os.close(); 
     } catch (IOException ex) { 
      Logger.getLogger(GenericResource.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

applicazione completa https://github.com/abdotalaat/upladeimageusingjersy

+0

Grazie, fammi provare. –

+0

ogni cosa va bene con te? si noti che il progetto completo è il progetto Netbeans – abdotalaat

+0

Grazie, funziona benissimo ... ' –

Problemi correlati