Web servis üzerinde dosya yükleme veya dosya indirme islemlerimizi yapabiliriz.Bu yazımda JSP sayfamız üzerinden web servisimize dosya yükleme işlemini gerçekleştireceğiz.Projemizde Jersey bağımlılığımızı kullanalım.Diğer RESTful projelerinden farklı olarak pom.xml dosyamız içerisine multipart bağımlılığımızıda eklememiz gerekiyor.
1)Maven projesi oluşturalım ve kullanacağımız bağımlılıklarımızı pom.xml dosyamız içerisine ekleyelim.
[code lang=”xml”]
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>0007-com.enesbyc-RESTful-FileUpload</groupId>
<artifactId>0007-com.enesbyc-RESTful-FileUpload</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<jersey-version>1.19</jersey-version>
</properties>
<dependencies>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>${jersey-version}</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-servlet</artifactId>
<version>${jersey-version}</version>
</dependency>
<!– Dosya yukleme islemi icin gerekli –>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>${jersey-version}</version>
</dependency>
</dependencies>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.5.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
</build>
</project>
[/code]
2)Web.xml dosyamız içerisine Jersey kullandığımızı belirtmemiz gerekiyor. Web.xml dosyamız içerisini düzenleyelim.
[code lang=”xml”]
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>0007-com.enesbyc-RESTful-FileUpload</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<!– Jersey kullanimi icin gerekli –>
<!– Jerseyi hangi paket içerisinde kullanacağımızı belirtiyoruz –>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<!– Jersey-JSON kullanimi icin gerekli –>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>com.enesbyc</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>
[/code]
3)Projemize sağ tıklayıp File -> New -> Other -> JSP File adımını izleyerek Upload.jsp dosyamızı oluşturalım.JSP sayfamız içerisinde Form oluşturalım.Bu form iki adet input elementi koyalım.İlk input bize dosyamızı yükleyeceğimiz kısım olacaktır.İkinci input ise yüklene bu dosyanın post işlemini gerçekleştirecektir.
[code lang=”html”]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>File Upload</title>
</head>
<body>
<!– Action ile UploadService icerisindeki metoda yonlendiriyoruz –>
<form action="rest/file/upload" method="post" enctype="multipart/form-data">
<h4>Yüklenecek dosyayi seciniz.</h4>
<input type="file" name="file"> <input type="submit" value="Upload File">
</form>
</body>
</html>
[/code]
4)com.enesbyc paketimizi oluşturalım ve içerisine UploadService isimli sınıfımızı oluşturalım.Service sınıfımız içerisinde Consumes anotasyonu ile birden fazla tipte veri alacağımızı belirtelim.Ayrıca dosya yükleme işleminde bize gelecek olan bilgi Form içerisinden geldiği için FormDataParam anotasyonu ile form içerisinden gönderdiğimiz dosyayı alıyoruz.Input stream ile dosyanın kendisine ulaşabiliriz.FormDataContentDisposition ile dosyanın adı , boyutu gibi ayrıntılı bilgilerine erişebiliriz.
[code lang=”java”]
package com.enesbyc;
import java.io.InputStream;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import com.sun.jersey.core.header.FormDataContentDisposition;
import com.sun.jersey.multipart.FormDataParam;
@Path("/file")
public class UploadService {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
// MULTIPART_FORM_DATA Formdan gelecek verinin tipini belirtir.
public Response uploadFile(
@FormDataParam ("file") InputStream inputStream,
//Dosya alinir
@FormDataParam ("file") FormDataContentDisposition fileDetails)
//Dosyanin icerigi aliniyor
{
//inputStream kullanarak dosya ile islemler yapabiliriz.
//fileDetails kullanarak dosya ayrintilarina ulasabiliriz.
String result="Dosya webservise ulasti.Yuklenen dosya adi:"+fileDetails.getFileName();
return Response.status(200).entity(result).build();
}
}
[/code]
5)Projemize sağ tıklayıp Run as->Run on the Server seçelim.Projemiz açıldığında Url kısmına Upload.jsp yazarak jsp sayfamızın çalıştırılmasını sağlayalım.Dosya yükleyip post işlemini gerçekleştirelim.Çıktıdanda anlaşılacağı üzere web servisimiz içerisindeki upload metodumuza dosyamız ulaştırılıyor.Upload metodu içerisinde dosyamızı istediğimiz şekilde kullanabiliriz.Bu projede sadece bilgilerini ekrana yazdırdım.Kullanımına göre veritabanına yazdırabilir , bilgileri okuyabilir veya herhangi bir işlem yaptırabilirsiniz.


Bir sonraki yazımda görüşmek üzere…