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でファイルを取得できます。ただし、ファイルインスタンスを別のメソッドに渡したい場合は、nullポインタ例外が発生します。そのような :

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

コントローラでaを呼び出すとpublic static method、Playは別のアクションを呼び出していると見なすため、HTTPリダイレクトを実行します。

したがって、リダイレクトする場合、2番目のファイルオブジェクトは存在しません。ここには2つのオプションがあります。

test2まず、非公開メソッドを作成できます。

次に、メソッドに@Util、で注釈を付けることができます。これは、Playにアクションではないため、リダイレクトを試行しないことを通知します。

于 2012-06-26T05:46:44.803 に答える