根据本指南,可以通过手动编写 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 中包含文件字段,然后统一处理错误。