Seeker
Seeker

Reputation: 1927

How to upload multiple files in Play Framework using Java

Hi i have been trying to upload image file in Play Framework. I have been trying out with Java File Upload since morning but unable to do so. I have seen [JavaFileUpload][1] tutorial available on framework website. But i am still not successful. Here is my code which i am trying to run:

Http.MultipartFormData body = request().body().asMultipartFormData();        
List<Http.MultipartFormData.FilePart> fileParts = body.getFiles();
     for (Http.MultipartFormData.FilePart filePart : fileParts) {
             String filename = filePart.getFilename();
             File file = filePart.getFile(); //error comes on this line

             if (filePart.getFilename().toLowerCase().endsWith(".png")) { 
                //saving here but how?

             } else {
                  return badRequest("Invalid request, only PNGs are allowed.");

             }
         }

but problem is that whenever i try to get the file i am having this conversion error:

java.lang.Object cannot be converted to java.io.File

Anyone can guide me in the direction? if we see the official document there is no proper documentation on how to upload multiple files. If anyone can show me some website which can helps me in that direction that will be also helpful

Upvotes: 2

Views: 1943

Answers (2)

Seeker
Seeker

Reputation: 1927

So after lots of trouble i was able to figure out the answer to my question. Here i am going to post the answer so it helps other people searching the answer to the same problem i faced

The controller function call which will upload the files looks like this:

Http.MultipartFormData body = request().body().asMultipartFormData();        
List<Http.MultipartFormData.FilePart> fileParts = body.getFiles();
     for (Http.MultipartFormData.FilePart filePart : fileParts) {
             if (filePart.getFilename().toLowerCase().endsWith(".png")) { 
             String filename = filePart.getFilename();
Files.write(Paths.get(filename + ".png"), readContentIntoByteArray((File) filePart.getFile()));

             } else {
                  return badRequest("Invalid request, only PNGs are allowed.");

             }
         }

I am using a function call to read the content of the file into byte array and save them inside the file:

private static byte[] readContentIntoByteArray(File file) {
    FileInputStream fileInputStream = null;
    byte[] bFile = new byte[(int) file.length()];
    try {
        //convert file into array of bytes
        fileInputStream = new FileInputStream(file);
        fileInputStream.read(bFile);
        fileInputStream.close();

    } catch (Exception e) {
        e.printStackTrace();
    }
    return bFile;
}

Remember you can choose whatever the path you want to save the file at Paths.get(filename + ".png")

Upvotes: 3

Kris
Kris

Reputation: 4823

I'm using Play 2.4 and

FilePart filePart = request().body().asMultipartFormData()
            .getFile("myFileKey");
File file = filePart.getFile();

With Play 2.2 I used for multiple file uploads:

MultipartFormData mfd = request().body().asMultipartFormData();
List<FilePart> filePartList = mfd.getFiles();
FilePart filePart = filePartList.get(0);

Upvotes: 2

Related Questions