Playframework 多文件上传

Posted

技术标签:

【中文标题】Playframework 多文件上传【英文标题】:Playframework Multiple File Upload 【发布时间】:2016-03-23 22:04:48 【问题描述】:

我正在使用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") asbody.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&lt;FilePart&gt;

如果我像这样为getFiles() 添加FilePart 演员表FilePart pdf = (FilePart) body.getFiles(); PlayFramework 会显示一个异常:[ClassCastException: scala.collection.convert.Wrappers$SeqWrapper cannot be cast to play.mvc.Http$MultipartFormData$FilePart] 如果我将 pdf 的类型更改为 List&lt;FilePart&gt;,然后它让我向 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】:

首先,getFiles() 和 getFile("pdf") 的区别在于前者获取文件列表,后者只获取一个文件。

试试下面的代码。

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

【讨论】:

感谢您的帮助。 List&lt;FilePart&gt; fileParts = request().body().asMultipartFormData().getFiles(); for(FilePart filePart : fileParts)这两行字拯救了我的一天

以上是关于Playframework 多文件上传的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发-AFNetworking参数和多文件同时上传多文件上传

el-upload多文件上传

文件上传(多文件上传)/下载

php多文件上传实现代码

文件上传--多文件上传

Servlet实现文件上传,可多文件上传