![](/img/trans.png)
[英]Scala Generics : Cannot write an instance of T to HTTP response. Try to define a Writeable[T]
[英]Scala Play file upload: Cannot write an instance of views.html.uploadFile.type to HTTP response
我在Play中创建了一个允许用户上传文件的最小网站。 虽然涉及的代码相当简单,但我找不到编译错误的原因:
Cannot write an instance of views.html.uploadFile.type to HTTP response. Try to define a Writeable[views.html.uploadFile.type]
以下是views.uploadFile.scala.html
的内容:
@helper.form(action = routes.FileUpload.handleUpload, 'enctype -> "multipart/form-data") {
File to upload: <input type="file" name="uploadedFile">
<div> <input type="submit"> </div>
}
这是控制器显示文件上传表单并处理上传的文件:
package controllers
import play.api.i18n.{MessagesApi, I18nSupport}
import play.api.mvc._
import javax.inject.Inject
class FileUpload @Inject()(val messagesApi: MessagesApi) extends Controller with I18nSupport {
def uploadForm = Action {
Ok(views.html.uploadFile)
}
def handleUpload = Action(parse.multipartFormData) { request =>
import java.io.File
request.body.file("uploadedFile") match {
case Some(file) =>
val fileName = file.filename
val uploadDir = "/tmp/uploadedFiles/"
file.ref.moveTo(new File(uploadDir + fileName))
Ok(s"File uploaded: $fileName")
case None =>
Redirect(routes.FileUpload.uploadForm()).flashing(
"error" -> "File invalid")
}
}
}
为了完整起见,这是我的routes
文件:
GET /uploadForm @controllers.FileUpload.uploadForm
POST /upload @controllers.FileUpload.handleUpload
我忽略了控制器动作中缺少的括号:
def uploadForm = Action {
// instead of Ok(view.html.uploadFile)
Ok(views.html.uploadFile())
}
添加它们使应用程序编译正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.