简体   繁体   中英

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

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM