We can
easily upload a file such as image file, pdf file, excel file, text file etc.
The @FormDataParam("file") annotation is used to mention file parameter in the service class. The @Consumes(MediaType.MULTIPART_FORM_DATA) is used to provide information of the file upload.
Steps:
- Jersey Multipart
Dependency :
To support multipart (file upload) in
Jersey, you just need to include “jersey-multipart.jar”
in Maven
pom.xmlfile.
<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>com.tushar.jersey.Project</groupId>
<artifactId>com.tushar.jersey.Project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>JAX-RS</name>
<description>Rest
service </description>
<build>
<sourceDirectory>src</sourceDirectory>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-client</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>
<dependency>
<groupId>com.sun.jersey.contribs</groupId>
<artifactId>jersey-multipart</artifactId>
<version>1.8</version>
</dependency>
</dependencies>
</project>
|
2. File Upload HTML Form
Simple HTML form to select and upload a file.
<html>
<body>
<h1>File Upload
with Jersey</h1>
<form action="rest/file/upload" method="post" enctype="multipart/form-data">
<p>
Select
a file : <input type="file"
name="file" size="45"
/>
</p>
<input type="submit" value="Upload
It" />
</form>
</body>
</html>
|
3. Upload Service with Jersey
In Jersey, use
@FormDataParam to receive the uploaded file. To get the uploaded file
name or header detail, match it to “FormDataContentDisposition“
package
com.tushar.jersey.Project;
import
java.io.File;
import
java.io.FileOutputStream;
import
java.io.IOException;
import
java.io.InputStream;
import
java.io.OutputStream;
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 FileUpload {
@POST
@Path("/upload")
@Consumes(MediaType.MULTIPART_FORM_DATA)
public
Response uploadFile(
@FormDataParam("file") InputStream uploadedInputStream,
@FormDataParam("file") FormDataContentDisposition fileDetail) {
String
uploadedFileLocation = "d://uploaded/" + fileDetail.getFileName();
// save it
writeToFile(uploadedInputStream,
uploadedFileLocation);
String
output = "File uploaded to : " + uploadedFileLocation;
return
Response.status(200).entity(output).build();
}
// save uploaded file to new location
private
void writeToFile(InputStream uploadedInputStream,
String
uploadedFileLocation) {
try
{
OutputStream
out = new FileOutputStream(new File(
uploadedFileLocation));
int
read = 0;
byte[]
bytes = new byte[1024];
out
= new FileOutputStream(new File(uploadedFileLocation));
while
((read = uploadedInputStream.read(bytes)) != -1) {
out.write(bytes,
0, read);
}
out.flush();
out.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
|
4. Select a file and click on the upload button, the selected file is uploaded to a pre-defined location.
URL : http://localhost:8080/com.tushar.jersey.Project/fileUpload.html



No comments:
Post a Comment