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