Search code examples
multipartform-dataplayframework-2.2fine-uploader

How to handle FineUploader POST request in Java in PlayFramework?


I am trying to integrate FineUploader in my play framework code. View part is set up properly and it is working fine.

I am not clear how to retrieve file in my controllers upload method. And other query parameters, qquuid, qqfilename, content-type e.tc.

Following is the dump of file upload request sent by FileUploader:-

Request Headers

Accept:application/json
Accept-Encoding:gzip, deflate
Accept-Language:en-US,en;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:1021645
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryk8BZISBKKjjqiWQ6
DNT:1
Host:localhost:9000
Origin:http://localhost:9000
Referer:http://localhost:9000/computers
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36
X-Requested-With:XMLHttpRequest

Request Payload
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="id"

593
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="qquuid"

bafb6448-1a87-40cc-abae-9624f37131cc
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="qqfilename"

Test.png
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="qqtotalfilesize"

1020995
------WebKitFormBoundaryk8BZISBKKjjqiWQ6
Content-Disposition: form-data; name="qqfile"; filename="Test.png"
Content-Type: image/png


------WebKitFormBoundaryk8BZISBKKjjqiWQ6--

Solution

  • I eventually found out by exploring play apis, sample code below.

        Http.MultipartFormData body = request().body().asMultipartFormData();
        Http.MultipartFormData.FilePart uploadFilePart = body.getFile("qqfile");
    
        String fileName = uploadFilePart.getFilename();
        File file = uploadFilePart.getFile(); 
    
    
        Map<String,String[]> dataPart = request().body().asMultipartFormData().asFormUrlEncoded();
    
        Iterator it = dataPart.entrySet().iterator();
        while (it.hasNext()) {
            Map.Entry pair = (Map.Entry)it.next();
            String[] values  = (String[]) pair.getValue();
            System.out.println(pair.getKey() + " = " + values[0]);
        }