使用 Scala 在 Play Framework 2 中使用 multipart 验证带有图像上传的表单数据
Validating form data with image upload using multipart in Play framework 2 with scala
我正在处理用户配置文件任务,其中我以多部分形式从 Form
获取用户信息和用户配置文件图片
这是代码
def addNewUser = Action(parse.multipartFormData){
implicit request =>
val firstName = request.body.dataParts.get("firstName").toString()
val lastName = request.body.dataParts.get("lastName").toString()
val email = request.body.dataParts.get("email").toString()
val password = request.body.dataParts.get("password").toString()
request.body.file("picture").map{ picture =>
import java.io.File
val filename : String = picture.filename
val contentType = picture.contentType
log.debug("pic uploaded , : {} , {}" ,filename )
log.debug("pic uploaded , {}" , contentType)
val config = ConfigFactory.load()
var path = config.getString("path")
var filepath = path.concat(filename)
picture.ref.moveTo(new File(filepath))
log.debug("sending response to u.i")
val status = Http.Status.OK
val json = Json.obj("status" -> status , "msg" -> "Signup successfull")
Ok(json)
//----------
}.getOrElse{
BadRequest("error occured ")
}
}
首先我想知道我是否使用了正确的方法来获取数据部分,或者是否有其他有效的方法来获取数据?
此外,我想验证这些表单字段,那么在这种情况下如何使用验证?
谢谢
Form Validation that Play Framework has will still work with multipart forms (here).
case class Example(foo: String, bar: Option[String])
val myForm = Form(mapping("foo" -> text, "bar" -> optional(text))
def addNewUser = Action(parse.multipartFormData) { implicit request =>
myForm.bindFromRequest(request.body.asFormUrlEncoded).fold(
errors => { /* ... */ },
data => {
request.body.file("picture").map { /* ... */ }
/* ... */
}
)
}
但是,如果经常这样做,您可以创建一个 custom BodyParser 将现有的 Multipart 和 Form 解析器组合在一起。
我正在处理用户配置文件任务,其中我以多部分形式从 Form
获取用户信息和用户配置文件图片
这是代码
def addNewUser = Action(parse.multipartFormData){
implicit request =>
val firstName = request.body.dataParts.get("firstName").toString()
val lastName = request.body.dataParts.get("lastName").toString()
val email = request.body.dataParts.get("email").toString()
val password = request.body.dataParts.get("password").toString()
request.body.file("picture").map{ picture =>
import java.io.File
val filename : String = picture.filename
val contentType = picture.contentType
log.debug("pic uploaded , : {} , {}" ,filename )
log.debug("pic uploaded , {}" , contentType)
val config = ConfigFactory.load()
var path = config.getString("path")
var filepath = path.concat(filename)
picture.ref.moveTo(new File(filepath))
log.debug("sending response to u.i")
val status = Http.Status.OK
val json = Json.obj("status" -> status , "msg" -> "Signup successfull")
Ok(json)
//----------
}.getOrElse{
BadRequest("error occured ")
}
}
首先我想知道我是否使用了正确的方法来获取数据部分,或者是否有其他有效的方法来获取数据?
此外,我想验证这些表单字段,那么在这种情况下如何使用验证?
谢谢
Form Validation that Play Framework has will still work with multipart forms (here).
case class Example(foo: String, bar: Option[String])
val myForm = Form(mapping("foo" -> text, "bar" -> optional(text))
def addNewUser = Action(parse.multipartFormData) { implicit request =>
myForm.bindFromRequest(request.body.asFormUrlEncoded).fold(
errors => { /* ... */ },
data => {
request.body.file("picture").map { /* ... */ }
/* ... */
}
)
}
但是,如果经常这样做,您可以创建一个 custom BodyParser 将现有的 Multipart 和 Form 解析器组合在一起。