cxyz cxyz - 1 year ago 303
Java Question

Jersey client to download and save file

I Am new to jersey/JAX-RS implementation.
Please find below my jersey client code to download file:

Client client = Client.create();
WebResource wr = client.resource("http://localhost:7070/upload-0.0.1-SNAPSHOT/rest/files/download");
Builder wb=wr.accept("application/json,application/pdf,text/plain,image/jpeg,application/xml,application/");
ClientResponse clientResponse= wr.get(ClientResponse.class);
File res= clientResponse.getEntity(File.class);
File downloadfile = new File("C://Data/test/downloaded/testnew.pdf");
FileWriter fr = new FileWriter(res);

My Server side code is :

public Response getFile()

File download = new File("C://Data/Test/downloaded/empty.pdf");
ResponseBuilder response = Response.ok((Object)download);
response.header("Content-Disposition", "attachment; filename=empty.pdf");

In my client code i am getting response as 200 OK,but i am unable to save my file on hard disk
In the below line i am mentioning the path and location where the files need to be saved.
Not sure whats going wrong here,any help would be appreciated.Thanks in advance!!

File downloadfile = new File("C://Data/test/downloaded/testnew.pdf");

Answer Source

I don't know if Jersey let's you simply respond with a file like you have here:

File download = new File("C://Data/Test/downloaded/empty.pdf");
ResponseBuilder response = Response.ok((Object)download);

You can certainly use a StreamingOutput response to send the file from the server, like this:

  StreamingOutput stream = new StreamingOutput() {
    public void write(OutputStream os) throws IOException,
    WebApplicationException {
      Writer writer = new BufferedWriter(new OutputStreamWriter(os));

      //@TODO read the file here and write to the writer

  return Response.ok(stream).build();

and your client would expect to read a stream and put it in a file:

            InputStream in = response.getEntityInputStream();
            if (in != null) {
                File f = new File("C://Data/test/downloaded/testnew.pdf");

                //@TODO copy the in stream to the file f

                System.out.println("Result size:" + f.length() + " written to " + f.getPath());
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download