我正在尝试将元组注册到数据库并将图像上传到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"]}
答案 0 :(得分:0)
您是否需要将文件内容作为表单本身的一部分?您将imgName声明为控制器中表单中的文本,但在视图中将其用作输入类型=“文件”,我认为这是矛盾的。
你可以看一些事情: