Playframework 2.2.1 Scala - Грешка във формуляра bindFromRequest

Опитвам се да регистрирам кортеж в DB и да кача изображението в 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"]} 

person Augusto    schedule 27.01.2014    source източник


Отговори (1)


Трябва ли съдържанието на файла да е част от самия формуляр? Вие декларирате imgName като текст във формуляра във вашия контролер, но го използвате като входен тип="файл" във вашия изглед, което бих си представил, че е противоречиво.

Няколко неща, които можете да разгледате:

person wwkudu    schedule 28.01.2014