Restful Web Services (JAX-RS) dosya indirme işlemi (file download) için @Produces notasyonu (annotations) içersinde indirmek istediğimiz dosya türü tanımlamalarını yapacağız. Bazıları:
- @Produces(“text/plain”)
- @Produces(“image/png”)
- @Produces(“application/pdf”)
- @Produces(“application/vnd.ms-excel”)
Yukarıdakilerin sayısı çoğaltılabilir ama sık kullanılanlar bunlardır.
Diğer örnekleirmizde olduğu gibi hemen Maven’da oluşturduğumuz projenin web.xml ve pom.xml ayarlarını yapalım.
pom.xml
1 2 3 4 5 6 7 8 9 10 11 12 |
... <dependencies> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.8</version> </dependency> </dependencies> ... |
web.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>Restful Web Application</display-name> <servlet> <servlet-name>jersey-serlvet</servlet-name> <servlet-class> com.sun.jersey.spi.container.servlet.ServletContainer </servlet-class> <init-param> <param-name>com.sun.jersey.config.property.packages</param-name> <param-value>org.onurarslan.rest</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>jersey-serlvet</servlet-name> <url-pattern>/rest/*</url-pattern> </servlet-mapping> </web-app> |
DownloadService.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
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("/download") public class DownloadService { private static final String FILE_PATH = "c:\\logo.png"; @GET @Path("/get") @Produces("image/png") public Response getFile() { File file = new File(FILE_PATH); ResponseBuilder response = Response.ok((Object) file); response.header("Content-Disposition", "attachment; filename=logo.png"); return response.build(); } } |
DownloadService isimli java sınıfımızda rest/download/get adresine gidildiğinde C dizininde yer alan logo.png dosyası için indirme hizmeti başlayacaktır. @Produces notasyonunda image/png tipinde veri olacağını tanımladık. file değişkeninde indireceğimiz dosyaya ait dizini belirledik. response değişkenine eklenen başlık (header) bilgisinde Content-Disposition ifadesi ile dosya indirme işlemi için pop-up açılmasını sağlıyoruz. file-name özelliği ile inecek dosyaya bir isim veriyoruz.