Skip to content

Commit 10d70e7

Browse files
committed
Implemented file upload for documents resource.
1 parent ec652d2 commit 10d70e7

File tree

4 files changed

+78
-5
lines changed

4 files changed

+78
-5
lines changed

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
<scope>provided</scope>
1515
</dependency>
1616

17+
<dependency>
18+
<groupId>org.glassfish.jersey.media</groupId>
19+
<artifactId>jersey-media-multipart</artifactId>
20+
<version>2.26</version>
21+
<scope>provided</scope>
22+
</dependency>
23+
1724
<dependency>
1825
<groupId>junit</groupId>
1926
<artifactId>junit</artifactId>

src/main/java/com/packtpub/javaee8/DocumentsResource.java

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,34 @@
11
package com.packtpub.javaee8;
22

3-
import javax.enterprise.context.ApplicationScoped;
3+
import org.glassfish.jersey.media.multipart.FormDataContentDisposition;
4+
import org.glassfish.jersey.media.multipart.FormDataParam;
5+
6+
import javax.enterprise.context.RequestScoped;
47
import javax.servlet.ServletContext;
5-
import javax.ws.rs.GET;
6-
import javax.ws.rs.Path;
7-
import javax.ws.rs.Produces;
8+
import javax.ws.rs.*;
89
import javax.ws.rs.core.Context;
10+
import javax.ws.rs.core.MediaType;
911
import javax.ws.rs.core.Response;
12+
import javax.ws.rs.core.UriInfo;
1013
import java.io.File;
14+
import java.io.IOException;
15+
import java.io.InputStream;
16+
import java.net.URI;
17+
import java.nio.file.FileSystems;
18+
import java.nio.file.Files;
19+
import java.util.logging.Level;
20+
import java.util.logging.Logger;
1121

12-
@ApplicationScoped
22+
@RequestScoped
1323
@Path("documents")
1424
public class DocumentsResource {
1525

26+
private static final Logger LOGGER = Logger.getAnonymousLogger();
27+
1628
@Context
1729
private ServletContext context;
30+
@Context
31+
private UriInfo uriInfo;
1832

1933
@GET
2034
@Path("/me.jpg")
@@ -33,4 +47,24 @@ public Response gif() {
3347
String path = context.getRealPath("/magic.gif");
3448
return Response.ok(new File(path)).build();
3549
}
50+
51+
@POST
52+
@Consumes(MediaType.MULTIPART_FORM_DATA)
53+
public Response upload(@FormDataParam("file") InputStream inputStream,
54+
@FormDataParam("file") FormDataContentDisposition fileInfo) {
55+
String fileName = fileInfo.getFileName();
56+
saveFile(inputStream, fileName);
57+
58+
URI uri = uriInfo.getBaseUriBuilder().path(DocumentsResource.class).path(fileName).build();
59+
return Response.created(uri).build();
60+
}
61+
62+
private void saveFile(InputStream file, String name) {
63+
try {
64+
java.nio.file.Path path = FileSystems.getDefault().getPath("/tmp/", name);
65+
Files.copy(file, path);
66+
} catch (IOException ie) {
67+
LOGGER.log(Level.WARNING, "Unable to save file.", ie);
68+
}
69+
}
3670
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,29 @@
11
package com.packtpub.javaee8;
22

3+
import org.glassfish.jersey.media.multipart.MultiPartFeature;
4+
35
import javax.ws.rs.ApplicationPath;
46
import javax.ws.rs.core.Application;
7+
import java.util.HashSet;
58
import java.util.Set;
69

710
/**
811
* Configures a JAX-RS endpoint.
912
*/
1013
@ApplicationPath("api")
1114
public class JAXRSConfiguration extends Application {
15+
@Override
16+
public Set<Class<?>> getClasses() {
17+
Set<Class<?>> classes = new HashSet<>();
18+
19+
classes.add(DocumentsResource.class);
20+
classes.add(MultiPartFeature.class);
21+
22+
classes.add(HateosResource.class);
23+
classes.add(JsonbResource.class);
24+
classes.add(JsonpResource.class);
25+
classes.add(VersionResource.class);
26+
27+
return classes;
28+
}
1229
}

src/main/webapp/upload.html

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>Building Web Services with Java EE 8</title>
6+
</head>
7+
<body>
8+
<h2>Upload file</h2>
9+
<form action="/content-service/api/documents" enctype="multipart/form-data" method="post">
10+
<label>Select File</label><input type="file" name="file"/>
11+
<br/>
12+
<input type="submit" title="Upload"/>
13+
</form>
14+
</body>
15+
</html>

0 commit comments

Comments
 (0)