このガイドによると、手動で html フォームを記述してファイルをアップロードできます。テキスト フィールド (名前や電子メールなど) を含む大きなフォームの一部として、ファイルのアップロードを処理したいと考えています。ここに私がしなければならないことがあります(かなり醜い):
def newUser = Action(parse.multipartFormData) { implicit request =>{
//handle file
import play.api.mvc.MultipartFormData.FilePart
import play.api.libs.Files.TemporaryFile
var uploadSuccessful = true
var localPicture: FilePart[TemporaryFile] = null
request.body.file("picture").map { picture =>
localPicture = picture }.getOrElse {
uploadSuccessful = false }
//process the rest of the form
signupForm.bindFromRequest.fold(
errors => BadRequest(views.html.signup(errors)),
label => {
//file uploading code here(see guide), including error checking for the file.
if(uploadSuccesful){
User.create(label._1, label._2, label._3._1, 0, "NO PHOTO", label._4)
Redirect(routes.Application.homepage).withSession("email" -> label._2)
} else {
Redirect(routes.Application.index).flashing(
"error" -> "Missing file"
}
})
} }
これは私には非常に醜く見えます。すべてのフィールド (ファイルのアップロードを除く) を含む signupForm をどこかに定義したことに注意してください。私の質問は次のとおりです。これについてもっときれいな方法はありますか? おそらく、signupForm に file フィールドを含めてから、エラーを均一に処理することによります。