播放框架多文件上传

时间:2011-11-15 12:01:26

标签: playframework

我尝试使用一个请求上传多个文件,但它始终出错,我的查看代码:

<input type="file" name="files[]" multiple>

public static void doUpload(File[] files) {
    File dir = new File(Play.applicationPath+File.separator+"public"+File.separator+"uploads");
    if (!dir.exists()) {
        dir.mkdirs();
    }

    boolean success = files.renameTo(new File(dir, files.getName()));
    if (!success) {
        renderText("{'success':'true', 'msg':{'url':'"+files.getName()+"'}}");
    } else {
        renderText("{'success':'true'}");
    }
}

如果我使用<input type="file" name="files">使用File files上的单个文件上传和使用{{1}}的控制器中的参数,那么它可以正常工作。

谢谢。

2 个答案:

答案 0 :(得分:1)

如果您有多个具有相同名称的输入,控制器将接收具有给定名称的数组作为数组,例如

控制器:

public static void upload(File[] files) {
    ...
}

查看:

#{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="Upload" />
#{/form}

您可以随时添加一些javascript以允许用户在客户端添加其他输入

答案 1 :(得分:0)

这在Play 1.2.5中使用<input type="file" name="files" multiple>中的多个标记可以正常工作。我在原始海报代码中看到的唯一问题是name="files[]"应该是name="files"

可能是早期版本的Play中也存在一个错误,但这对我有用(我选择了50个带有一个文件输入的文件)