Scala /Playgurusがあります。
Play 2.1(RC1)でAJAXを使用してファイルをアップロードしようとしています。クライアント部分では、eldarion / bootstrap-ajaxを使用していますが、アップロードされたファイルが空であることを除いて、すべて問題ないようです。
フロントエンドスニペット:
...
<form action="@routes.Campaigns.upload" method="post" class="form ajax replaceable" data-replace=".replaceable">
<input type="file" name="picture">
<p><input class="btn" type="submit"></p>
</form>
...
必要なcssクラス(data-replace)にダッシュが含まれているため、ヘルパーの代わりに明示的な<form>
タグを使用@form
する必要があり、したがって、として使用できないことに注意してSymbol
ください。とにかく。コントローラで呼び出されたアクションは次のようになります。
def upload = Action(parse.temporaryFile) {
request =>
Logger.info("Trying to upload a file")
val resultString = try {
val file = new File("/tmp/picture")
request.body.moveTo(file, true)
"file has been uploaded"
} catch {
case e: Exception => "an error has occurred while uploading the file"
}
val jsonResponse = Json.toJson(
Map("html" -> Json.toJson("<p>" + resultString + "</p>")
)
)
Ok(jsonResponse)
}
開発が進むにつれ、ファイル名をよりインテリジェントに設定する必要があることは承知していますが、現時点では、/ tmp/pictureは他の名前と同じくらい良い名前です。
JSON応答が生成され(「ファイルがアップロードされました」というメッセージが含まれます)、200応答のペイロードとしてブラウザーに返送されます。JSONが受信され、ページを変更するために正しく使用されます(この場合、アップロードフォームを削除するだけです)。
ただし、ファイルは適切なタイミングで適切な場所に表示されますが、常に空です。
larsson:tmp bruno$ ls -l /tmp/picture
-rw-r--r-- 1 bruno staff 0 7 Jan 03:07 /tmp/picture
私の意見では、これは特に奇妙なことです。なぜなら、multipart/form-data
AJAXをまったく使用せず、パラメータとしてAction
withを使用する代わりに、従来の形式を使用するアップロードコードは正常に機能するからです。parse.multipartFormData
parse.temporaryFile
どんな助けでも大歓迎です。前もって感謝します。