Scala 播放框架:将文件内容流式传输到S3

Scala 播放框架:将文件内容流式传输到S3,scala,amazon-s3,playframework,Scala,Amazon S3,Playframework,我正在尝试使用Play的EssentialAction以以下方式将文件内容流式传输到S3: def upload(fileName: String) = EssentialAction { request => val (iteratee, enumerator) = Concurrent.joined[Array[Byte]] blobStore.streamToStore(fileName, enumerator) //consumes the enumerator

我正在尝试使用Play的
EssentialAction
以以下方式将文件内容流式传输到S3:

  def upload(fileName: String) = EssentialAction { request =>
    val (iteratee, enumerator) = Concurrent.joined[Array[Byte]]
    blobStore.streamToStore(fileName, enumerator) //consumes the enumerator, streams to S3 and returns Future[Unit]
    iteratee.map { _ =>
      Logger.debug(s"Successfully uploaded file=$fileName")
      Created(Json.obj("id" -> fileName))
    }
  }

如果
blobStore.streamToStore
成功流式处理,则上述操作有效,但如果流式处理时出现任何错误,则请求永远不会完成,在
iteratee上执行
recover
也没有帮助。有人能解释一下在这种情况下如何处理错误吗?

我只是需要在出现错误时使用枚举器:

blobStore.streamToStore(fileName, enumerator).recover {
  case throwable =>
    /* consume the enumerator for request to complete */
    enumerator |>> Iteratee.consume[Array[Byte]]().map(_ => throw throwable)
}
iteratee.map { _ =>
  Logger.debug(s"Successfully uploaded file=$fileName")
  Created(Json.obj("id" -> fileName))
}.recover {
  case NonFatal(throwable) => 
     InternalServerError(Results.EmptyContent())
}