📖
[http4s] レスポンスを返したあとに処理をする
やりたいこと
環境
- Scala: 3.4.2
- http4s: 0.23.27
実装
Response[F]
のbodyがfs2.io.Stream
なので、onFinalizeで混ぜ込む
def route: HttpRoutes[IO] =
HttpRoutes.of[IO] { case GET -> Root / "download-file" =>
val file: java.io.File = ??? // ファイルを用意する
val fs2Path = fs2.io.file.Path.fromNioPath(file.toPath)
StaticFile
.fromPath[IO](fs2Path)
.getOrElseF(NotFound("ファイルが見つかりませんでした")) // fromPathでfileが見つからなかった場合の処理
.map { response =>
response.withBodyStream(
response.body.onFinalize(IO(file.delete()).void) // bodyのStream処理が終わった後にファイルを削除する
)
}
}
おわり
Discussion