Playframework多文件上传

时间:2016-03-23 22:04:48

标签: 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(),它会告诉我添加强制转换。所以它为我提供了两种选择。一种是添加FilePart强制转换,第二种是将pdf的类型更改为List<FilePart>

如果我为FilePart添加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(); 
    ...

播放框架版本:2.4

1 个答案:

答案 0 :(得分:2)

首先,getFiles()和getFile(&#34; pdf&#34;)之间的区别在于前者获取文件列表,而后者只获取一个文件。

请尝试以下代码。

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