首页 > 解决方案 > 如何在将文件下沉到 playframework 中的目标之前检查文件大小?

问题描述

为了学习,我在 scala-playframework 中编写了一个代码,以通过FilePartHandlermultipartFormData解析器中使用来上传文件。我的代码在这里

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从上传的位置逐步删除目的地的文件。但我的问题 - 在将文件移动到目的地之前,是否有任何播放提供的方法来检查文件大小?

标签: scalaplayframework

解决方案


推荐阅读