在 FileIO.toPath 接收器完成时触发

Triggering on FileIO.toPath sink completion

我有一个 IO 源我正在多路复用一个文件并移交给系统的另一部分执行,如:

source.alsoTo(FileIO.toPath(path))

这用于缓存,即我正在将通过我的系统传递到临时缓存位置的文件写入。写入缓存后,我想将其自动移动到最终位置。

源的消费者得到一个 Future 并且知道它何时完成,但是我的侧通道写入文件到磁盘没有我能找到的这样的工具。有没有什么方法可以将完成处理程序附加到接收器,以便我可以完成对该文件的操作?

而不是alsoTo,使用alsoToMatmapMaterializedValue来访问文件Sink的物化值:

val source: Source[ByteString, _] = ???

val cachedSource =
  source
    .alsoToMat(FileIO.toPath(path))(Keep.right)
    .mapMaterializedValue { fileResult => // fileResult is a Future[IOResult]
      // do something with fileResult
    }