In this example we are going to see how you can download a file from a JAX-RS REST Service. It's easy to do that, as it requires to annotate the bind method with the
@Produces
annotation. The @Produces
annotation can used to used to specify the MIME media types a service can produce and send to the client. In this example we are going to see how you can download text, image, PDF and excel files.
The second thing to note is that you have to attach the file to the response and then set the
Content-Disposition
header variable of the response. The Content-Disposition
response-header field is used to dictate a a default file name if the user requests that the content is saved to a file. A simple example would be : Content-Disposition: attachment; filename="fname.ext"
. Using this, the user-agent will not display the response, but directly the pop up "Save as…" dialogue.
To download different file formats all you have to do is change the type registered in
@Produces
annotation.@Produces("image/png")
for images (you can change the "png" part according to the format of the image).@Produces("application/pdf")
for PDF files.@Produces("application/vnd.ms-excel")
for Excel files.
import java.io.File;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
@Path("/files")
public class HelloWorldREST {
// The file paths of the files in the server
private static final String TXT_FILE = "C:\\test.txt";
private static final String IMAGE_FILE = "C:\\test.png";
private static final String PDF_FILE = "C:\\test.pdf";
private static final String EXCEL_FILE = "C:\\test.xls";
/**
* Download Text File
*/
@GET
@Path("/txt")
@Produces("text/plain")
public Response getTextFile() {
File file = new File(TXT_FILE);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition", "attachment; filename=\"test_text_file.txt\"");
return response.build();
}
/**
* Download Image File
*/
@GET
@Path("/images")
@Produces("image/png")
public Response getImageFile() {
File file = new File(IMAGE_FILE);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition", "attachment; filename=\"test_image_file.png\"");
return response.build();
}
/**
* Download PDF File
*/
@GET
@Path("/pdf")
@Produces("application/pdf")
public Response getPDF() {
File file = new File(PDF_FILE);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition", "attachment; filename=\"test_PDF_file.pdf\"");
return response.build();
}
/**
* Download Excel File
*/
@GET
@Path("/excel")
@Produces("aapplication/vnd.ms-excel")
public Response getExcell() {
File file = new File(EXCEL_FILE);
ResponseBuilder response = Response.ok((Object) file);
response.header("Content-Disposition", "attachment; filename=\"test_excel_file.xls\"");
return response.build();
}
}