java - Playframework 多文件上传

标签 java file playframework playframework-2.4

我正在使用JavaFileUpload并想要上传多个 pdf 文件。

HTML 部分:

 @helper.form(action = routes.Application.uploadPost, 'enctype -> "multipart/form-data") {
        <input type="file" id="inputFile" name="pdf" accept="application/pdf" multiple autofocus >
        <p>
            <input type="submit">
        </p>
        }

我必须改变body.getFile("pdf") as body.getFiles() 能够获取我想要成功上传的每个 pdf 文档。 如果我使用 getFiles() 我可以看到每个文档如果我使用 getFile("pdf")它只是选择第一个文档。

我尝试上传五个 pdf 文档,这里是 getFiles() 之间的区别和getFile("pdf")

output of getFiles():  [play.mvc.Http$MultipartFormData$FilePart@3ac08835, play.mvc.Http$MultipartFormData$FilePart@362e6db5, play.mvc.Http$MultipartFormData$FilePart@2224a1dd, play.mvc.Http$MultipartFormData$FilePart@12fec5ae, play.mvc.Http$MultipartFormData$FilePart@14642c40]

output of getFile("pdf"):  play.mvc.Http$MultipartFormData$FilePart@3ac08835

在Java部分,如果我改变getFile("pdf")getFiles() ,它告诉我添加 Actor 。所以它为我提供了两种选择。一是添加FilePart Actor ,第二个是将pdf类型更改为List<FilePart>

如果我添加FilePart Actor getFiles()像这样FilePart pdf = (FilePart) body.getFiles(); PlayFramework 向我展示了一个异常:[ClassCastException: scala.collection.convert.Wrappers$SeqWrapper cannot be cast to play.mvc.Http$MultipartFormData$FilePart] 如果我将 pdf 类型更改为 List<FilePart> ,然后它建议我将强制类型添加到 pdf.getFilename()像这样:((FilePart) pdf).getFilename() ,它还允许我向 File file = pdf.getFiles() 添加两个强制转换像这样:File file = (File) ((MultipartFormData) pdf).getFiles() 。如果我运行代码,我也会得到同样的异常。

  • 在这种情况下有什么办法可以上传多个pdf文档吗?

半代码:(如果需要,我可以添加完整代码。其余代码是使用 PDFBox 进行解析并索引到 Solr 和 HBase

import play.mvc.Http.MultipartFormData;
import play.mvc.Http.MultipartFormData.FilePart;

MultipartFormData body = request().body().asMultipartFormData();

    for(int i=0; i<body.getFiles().size(); i++) {
    body = request().body().asMultipartFormData();
    FilePart pdf = body.getFile("pdf"); //getFiles();
    String fileName = pdf.getFilename();
    File file = pdf.getFile(); //getFiles(); 
    ...

Play框架版本:2.4

最佳答案

首先,getFiles() 和 getFile("pdf") 之间的区别是前者获取文件列表,而后者仅获取一个文件。

尝试以下代码。

List<FilePart> fileParts = request().body().asMultipartFormData().getFiles();
for(FilePart filePart : fileParts) {
   filePart.getFile();
}

关于java - Playframework 多文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36189590/

相关文章:

应用程序中的 Java SSL 和 keystore 密码

java - 链接两个对象并逐个获取它们

java - 如何获得java中每个循环输出的总和?

php - $_SERVER 可以在 PHP 中伪造吗?

c# - 如何获取文件第一个字节在磁盘上的位置?

java - 使用 Java 将字体写入磁盘(.ttf 文件)

playframework - Play Framework 集下载文件名

java - 无法正确返回 arraylist 对象

playframework - 从 Play 迁移的步骤是什么! 1.1到2.0?

java - 在运行时替换某些方法的内容