Play 框架 - 如何写入 public 资产
Play framework - how to write to public assets
正在尝试处理上传的图片,然后显示结果。正在关注:https://github.com/playframework/play-scala-fileupload-example
相关片段:
private def handleFilePartAsFile: FilePartHandler[File] = {
case FileInfo(partName, filename, contentType) =>
val path: Path = Files.createTempFile("multipartBody", "tempFile")
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, path.toFile)
}
}
如何获取要写入图像的 /public/images
资产文件夹的绝对路径,而不是使用 Files.createTempFile
?
我想您会像您提到的 link 中的项目一样使用 Play 2.6。
在这种情况下,您可以从 4 个路径构建 /public/images 文件夹中的文件路径:
- 已部署Play的绝对路径!申请
- 资产文件夹的基本(相对)路径
- /图片
- 文件名
在 Scala 中:
val path = env.rootPath + af.assetsBasePath + "/images/" + filename
对于第一部分和第二部分,您需要自动注入 Environment 和 AssetsFinder 对象,例如:
@Singleton
class HomeController @Inject() (cc:MessagesControllerComponents,
af: AssetsFinder, env: Environment)
(implicit executionContext: ExecutionContext)
...
正在尝试处理上传的图片,然后显示结果。正在关注:https://github.com/playframework/play-scala-fileupload-example
相关片段:
private def handleFilePartAsFile: FilePartHandler[File] = {
case FileInfo(partName, filename, contentType) =>
val path: Path = Files.createTempFile("multipartBody", "tempFile")
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, path.toFile)
}
}
如何获取要写入图像的 /public/images
资产文件夹的绝对路径,而不是使用 Files.createTempFile
?
我想您会像您提到的 link 中的项目一样使用 Play 2.6。 在这种情况下,您可以从 4 个路径构建 /public/images 文件夹中的文件路径:
- 已部署Play的绝对路径!申请
- 资产文件夹的基本(相对)路径
- /图片
- 文件名
在 Scala 中:
val path = env.rootPath + af.assetsBasePath + "/images/" + filename
对于第一部分和第二部分,您需要自动注入 Environment 和 AssetsFinder 对象,例如:
@Singleton
class HomeController @Inject() (cc:MessagesControllerComponents,
af: AssetsFinder, env: Environment)
(implicit executionContext: ExecutionContext)
...