使用PlayFramework的多个上传文件

时间:2012-01-16 13:21:40

标签: file-upload playframework

我正在尝试使用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。

非常感谢你的帮助!

3 个答案:

答案 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)

multi file upload with play?

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数组。如果有人知道它的播放/标准注释,请告诉我:)