簡體   English   中英

如何使用Java在Play Framework中上載多個文件

[英]How to upload multiple files in Play Framework using Java

您好我一直在嘗試上傳Play Framework中的圖像文件。 我從早上開始嘗試使用Java File Upload但是無法這樣做。 我在框架網站上看到了[JavaFileUpload][1]教程。 但我仍然沒有成功。 這是我正在嘗試運行的代碼:

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

             }
         }

但問題是,每當我嘗試獲取文件時,我遇到此轉換錯誤:

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

任何人都可以指導我的方向嗎? 如果我們看到官方文檔,就沒有關於如何上傳多個文件的正確文檔。 如果有人能告訴我一些網站可以幫助我朝這個方向發展,也會有所幫助

我正在使用Play 2.4和

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

使用Play 2.2我用於多個文件上傳:

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

所以經過很多麻煩我能夠找到問題的答案。 在這里,我將發布答案,以幫助其他人搜索我遇到的同一問題的答案

將上傳文件的控制器函數調用如下所示:

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

             }
         }

我正在使用函數調用將文件的內容讀入字節數組並將其保存在文件中:

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

請記住,您可以在Paths.get(filename + ".png")Paths.get(filename + ".png")選擇要保存文件的路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM