我正在尝试使用Play Framework一次上传多个文件,但我总是为每个上传的第一张图片。这是一个具体案例:
HTML:
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" name="image" />
<input type="file" name="image" />
<input type="file" name="image" />
<input type="file" name="image" />
<input type="submit" name="submit" value="Send images" />
</form>
控制器:
public static void upload() {
File[] images = params.get("image", File[].class);
for (File f : images) {
Logger.info (f.getName());
}
}
如果我上传image1.jpg,image2.jpg,image3.jpg&amp; image4.jpg,控制台上的Logger.info
将显示:
image1.jpg
image1.jpg
image1.jpg
image1.jpg
不会使用其他图像。
我尝试使用List<File>
代替File[]
,但它既不起作用。
我也看到在SO(here)上有同样的问题,用这个作为答案:
List<Upload> files = (List<Upload>) request.args.get("__UPLOADS");
但它在Play的v1.2.4中不起作用。
我正在使用Play v1.2.4。
非常感谢你的帮助!
答案 0 :(得分:2)
好吧,我在Play上开了一个ticket!框架,因为它似乎是问题,显然,我不是唯一有这种行为的人。
我使用新的1.2.5进行了测试,问题得到解决,至少我在问题上给出了解决方案:
public static void upload() {
File[] images = params.get("image", File[].class);
for (File f : images) {
Logger.info (f.getName());
}
}
注意:我正在使用Java 7!
答案 1 :(得分:0)
使用自动绑定而不是查看参数:
public class Application extends Controller {
public static void index() {
render();
}
public static void upload(File[] files)
{
for (File file : files)
{
Logger.info(file.getName());
}
index();
}
}
视图模板:
#{extends 'main.html' /}
#{set title:'Home' /}
#{form @upload(), enctype:'multipart/form-data'}
<input type="file" name="files" />
<input type="file" name="files" />
<input type="file" name="files" />
<input type="submit" value="Send it..." />
#{/}
答案 2 :(得分:-1)
public static void overviewsubmit(File fake) {
List<Upload> files = (List<Upload>) request.args.get("__UPLOADS");
for(Upload file: files) {
Logger.info("Size = %d", file.getSize());
}
}
如果没有File伪参数,该方法将不会处理multipart / form-data,您将得到一个空的request.args数组。如果有人知道它的播放/标准注释,请告诉我:)