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

<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>

Next:

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

@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;
    }

@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

Advertisements

Phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất / Thay đổi )

Connecting to %s