使用 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 解析器组合在一起。