Playframework 多文件上传
Playframework Multiple File Upload
我正在使用 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>
如果我像这样为 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<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
首先,getFiles()和getFile("pdf")的区别是前者获取文件列表,后者只获取一个文件。
试试下面的代码。
List<FilePart> fileParts = request().body().asMultipartFormData().getFiles();
for(FilePart filePart : fileParts) {
filePart.getFile();
}
我正在使用 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>
如果我像这样为 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<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
首先,getFiles()和getFile("pdf")的区别是前者获取文件列表,后者只获取一个文件。
试试下面的代码。
List<FilePart> fileParts = request().body().asMultipartFormData().getFiles();
for(FilePart filePart : fileParts) {
filePart.getFile();
}