Monday, June 8, 2015

Jersey file upload (java restful)

Objectives



  1. Describe step by step upload media to server through Restful services (using jersey)

  2. Demo: build register page with text field and file field



Input user info


rest1

Upload result


rest2

First:


Design client page
[sourcecode language="html"]
<html>
<head>
<title>Demo jersey file upload</title>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, initial-scale=1.0">
</head>
<body>
<H1>Demo jersey file upload</H1>
<form action="rest/files/reg" method="POST"
enctype="multipart/form-data">
Name:<br/>
<input type="Text" name="txtName"/><br/>
Picture:<br/>
<input type="file" name="file"/><br/><br/>
<input type="submit" value="Upload" />
</form>
</body>
</html>
[/sourcecode]

Next:


- Create restful service with uri as rest/files/reg
- Design function to handle above uri as below

[sourcecode language="java"]
@POST
@Path("/reg")
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Produces("text/xml")
public String uploadFile(FormDataMultiPart form,
@FormDataParam("txtName") String name) {
FormDataBodyPart filePart = form.getField("file");
ContentDisposition headerOfFile = filePart.getContentDisposition();
InputStream fileInput = filePart.getValueAs(InputStream.class);
String imgPath = application.getRealPath("") + "\\imgs\\" + headerOfFile.getFileName();
int size = 0;
int read = 0;
try (OutputStream outpuStream = new FileOutputStream(new File(imgPath))) {
byte[] bytes = new byte[1024];
while ((read = fileInput.read(bytes)) != -1) {
outpuStream.write(bytes, 0, read);
size += read;
}
outpuStream.flush();
} catch (Exception e) {
return "<result>"+e.toString()+"</result>";
}
NumberFormat f = NumberFormat.getNumberInstance(Locale.ENGLISH);
String rs = "<result>"
+ "<name>" + name + "</name>"
+ "<url>"
+ application.getContextPath() + "/imgs/" + headerOfFile.getFileName()
+ "</url>"
+ "<fileInfo>"
+ "<size>" + f.format(size) + " bytes</size>"
+ "<type>" + filePart.getMediaType()+ "</type>"
+ "<uploadDate>"
+ Calendar.getInstance().getTime().toString()
+ "</uploadDate>"
+ "</fileInfo>"
+ "</result>";
return rs;
}
[/sourcecode]

- @Consumes(MediaType.MULTIPART_FORM_DATA) map a data from to restful function
- FormDataBodyPart filePart = form.getField("file"); extract file field on the form
- ContentDisposition headerOfFile = filePart.getContentDisposition(); get user file information

notes:
- lib for this demo: jersey, jersey-multipart.

Download source code

No comments:

Post a Comment

Translate