Jersey Image Upload Client

Jitendra Kumawat picture Jitendra Kumawat · Jan 9, 2015 · Viewed 14.9k times · Source

I am trying to upload image using Jersey webservice , i am using jersey client to upload image. below is jersey web service which takes inputstream and uploads image on server. it works fine when i directly call it using jsp multipart form upload but fails when i upload images using jersey client

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

Below is Jersey Client to upload Image, the client code is part of another web service which is called from php rest client and this jersey client call to jersey web service to upload image, if i directly call jersey web service to upload image that work's fine but it is not working when i upload using jersey client.

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)

Please help me not sure what i am missing here. Thanks.

Answer

abdotalaat picture abdotalaat · Jan 9, 2015

this full example to upload image using jersey client and webservice you client code

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

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

Full application https://github.com/abdotalaat/upladeimageusingjersy