scala - 如何在将文件下沉到 playframework 中的目标之前检查文件大小?
问题描述
为了学习,我在 scala-playframework 中编写了一个代码,以通过FilePartHandler
在multipartFormData
解析器中使用来上传文件。我的代码在这里
type FilePartHandler[A] = FileInfo => Accumulator[ByteString, FilePart[A]]
def filePartHandler: FilePartHandler[File] = {
case FileInfo(partname, fileName, contentType) =>
// val isAppropriateFileType: Boolean = List("image/png", "image/jpg", "image/jpeg").contains(contentType.getOrElse(""))
val file = new File("/tmp/picture/" + fileName)
val sink = FileIO.toPath(file.toPath)
val accumulator = Accumulator.apply(sink)
accumulator.mapFuture {
case IOResult(_, scala.util.Failure(exception)) => Future.failed(exception)
case IOResult(size, Success(Done)) => Future.successful(FilePart(partname, fileName, contentType, file))
}
}
我可以在 中检查文件大小accumulator.mapFuture(. . .)
,但这一步很晚,因为在Accumulator
步骤中文件已经移动到了目的地。是的,我可以
accumulator.mapFuture
从上传的位置逐步删除目的地的文件。但我的问题 - 在将文件移动到目的地之前,是否有任何播放提供的方法来检查文件大小?
解决方案
推荐阅读
- corda - Corda 可以在 Ubuntu 下工作吗?
- javascript - npm install 有几个 package.json
- php - PHP 联系表单在 Wordpress 上不起作用
- android - 如何视频录制活动的一部分?
- java - 创建我所在班级的对象
- php - 返回数组中相同id的多个值
- html - 基于 ng-model 值的 HTML 元素的 CSS 样式
- sql-server - 当一个 SQL 表链接到另一个表时,是否无法从数据库中删除数据?
- corda - Corda - Notary Vault 表和唯一性
- javafx - 在 JavaFX 中更新可调整大小的应用程序上的节点