Playframework 2.2.1 Scala - 表单bindFromRequest错误

时间:2014-01-27 04:48:07

标签: scala amazon-s3 playframework-2.2

我正在尝试将元组注册到数据库并将图像上传到Amazon S3。

我将代码分为两部分:1)工作代码和2)非工作代码。

工作代码意味着它按预期工作。图像文件成功上传到S3。

非工作代码总是折叠到我正在尝试解决的index_error页面,但我无法弄清楚我在哪里丢失。

谢谢你的帮助!

工作代码

def index = Action {
  Ok(views.html.upload_test_index("File Upload In Play"))
}

def uploadFile = Action(parse.multipartFormData) { request =>
  request.body.file("fileUpload").map { video =>

  val newFile = File.createTempFile("temp-uploaded-", video.filename)
  video.ref.moveTo(newFile, true)

  new S3Sender(newFile, video.filename).send

}.getOrElse {
  Redirect(routes.Application.index)
}
Ok("File has been uploaded")

}

非工作代码 - 控制器

val anuncioForm = Form(
  tuple(
    "label" -> nonEmptyText,
    "imgName" -> text
  )
)


def createAnuncio = Action(parse.multipartFormData) { implicit request =>
  anuncioForm.bindFromRequest.fold(
    formWithErrors => BadRequest(views.html.index_error(formWithErrors)),
    {
      case (label, imgName) =>
        request.body.file("imgName").map { imgName =>
        val newFile = File.createTempFile("temp-uploaded-", imgName.filename)
        val fileName = imgName.filename
        imgName.ref.moveTo(newFile, true)
        new S3Sender(newFile, fileName).send
        Anuncio.create(label, fileName)
      }

      println("criou")
      Redirect(routes.Application.anuncios)
    }
  )
}

  def anuncios = Action {
    Ok(views.html.index(Anuncio.all(), anuncioForm))
  }

  def newAnuncio = Action {
    Ok(views.html.create(anuncioForm))
  }

非工作代码 - 模板

@(anuncioForm: Form[(String, String)])

@import helper._

@main("Criar um novo anuncio") {

@form(action = routes.Application.createAnuncio, 'enctype -> "multipart/form-data") {
    @inputText(anuncioForm("label"))
    @*<input type="file" name="imgName">*@
    @inputFile(anuncioForm("imgName"))

    <input type="submit" value="Create">
}
}

已编辑

我使用下面的代码来了解错误消息。

formWithErrors => BadRequest(views.html.index_error(formWithErrors.errorsAsJson))

令人惊讶的是我收到了以下信息。我无法弄清楚为什么这条消息?!

{"imgName":["This field is required"]} 

1 个答案:

答案 0 :(得分:0)

您是否需要将文件内容作为表单本身的一部分?您将imgName声明为控制器中表单中的文本,但在视图中将其用作输入类型=“文件”,我认为这是矛盾的。

你可以看一些事情: