我想在视图中显示上传的文件;但是我不知道该怎么做。
首先我试图传递multipartFormData
给视图文件,但发生了错误:
类 MultipartFormData 接受类型参数
问题是以下几行:
@(user:models.User,file:MultipartFormData,fileOption:Option[Long])(隐式请求:RequestHeader,messages:Messages,webJarAssets:WebJarAssets)
在我的控制器类 ( FileUploadController.scala
) 中,我有以下内容:
type FilePartHandler[A] = FileInfo => Accumulator[ByteString, FilePart[A]]
def handleFilePartAsFile: FilePartHandler[File] = {
case FileInfo(partName, filename, contentType) =>
val attr = PosixFilePermissions.asFileAttribute(util.EnumSet.of(OWNER_READ, OWNER_WRITE))
val path: Path = Files.createTempFile("multipartBody", "tempFile", attr)
if (Files.notExists(path)) Files.createFile(path)
val file = path.toFile
val fileSink: Sink[ByteString, Future[IOResult]] = FileIO.toPath(path)
val accumulator: Accumulator[ByteString, IOResult] = Accumulator(fileSink)
accumulator.map {
case IOResult(count, status) =>
logger.info(s"count = $count, status = $status")
FilePart(partName, filename, contentType, file)
}
}
def upload = silhouette.SecuredAction.async(parse.multipartFormData(handleFilePartAsFile)) { implicit request =>
val fileOption = request.body.file("picName").map {
case FilePart(key, filename, contentType, file) =>
logger.info(s"key = ${key}, filename = ${filename}, contentType = ${contentType}, file = $file")
val data = operateOnTempFile(file)
FileUploadFormSupport.picsave(key, filename, contentType, file)
data
}
Future.successful(Ok(views.html.fileUpload2(request.identity, request.body.file("picName"), fileOption)))
}
}
在我的视图文件 ( fileupload2.scala.html
) 中,我有以下内容:
@(user: models.User, file: MultipartFormData, fileOption: Option[Long])(implicit request: RequestHeader, messages: Messages, webJarAssets: WebJarAssets)
@import b3.inline.fieldConstructor
@main(Messages("fileupload.title"), Some(user)) {
<div class="user col-md-6 col-md-offset-3">
<div class="row data">
<div class="col-md-12">
<div class="row">
<img src="file">
<p class="col-md-6"><strong>@Messages("file.name"):</strong></p>
<p class="col-md-6">file size is @fileOption.getOrElse("None")</p>
</div>
</div>
</div>
</div>
}
解决了。
当修改为 MultipartFormData[_] 时,类型不匹配;
[错误] 发现:选项[play.api.mvc.MultipartFormData.FilePart[java.io.File]]
[错误] 需要:play.api.mvc.MultipartFormData[_]
发生。
那么我应该在视图中这样写:
@(文件:选项[MultipartFormData.FilePart[java.io.File]])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句