0

我正在尝试使用 playframework 上传文件。我创建了一个表单和相应的控制器,如下所示:

<form action="@{Admin.testUpload()}" method="POST" enctype="multipart/form-data">
    <input type="text" name="title" />
    <input type="file" name="f1" />
    <input type="file" name="f2" />    
    <input type="submit" value="Send it..." />
</form>


public static void testUpload(File f1, File f2) { 
    System.out.println(f1.getName());
    System.out.println(f2.getName());
}

现在很好,我可以通过实例 f1 和 f2 获取文件。但是,当我想将文件实例传递给另一个方法时,就会发生空指针异常。如 :

public static void testUpload(File f1, File f2) {
    test2(f1);
}

public static void test2(File f1) {
    System.out.println(f1.getName());
}

它将导致 test2 方法中的异常。我发现 playframework 尝试从 tmp 文件夹中获取图像。似乎 playframework 会自动将文件上传到 tmp 文件夹并使用我上传的文件名创建一个文件夹。

是游戏机制吗?

4

1 回答 1

4

当您public static method在控制器中调用 a 时,Play 将执行 HTTP 重定向,因为它认为您正在调用另一个操作。

因此,当您重定向时,第二个文件对象不存在。您在这里有两个选择。

首先,您可以创建test2一个非公共方法。

其次,您可以使用 注释该方法@Util,这告诉 Play 它不是一个动作,因此不会尝试重定向。

于 2012-06-26T05:46:44.803 回答