如何在响应调用后删除 Ktor 服务器多部分数据临时文件

How to delete Ktor server multipart data temp files after responding to call

我是 运行 Ubuntu 20.04 上的 Ktor 服务器,它使用 multipart/form-data 通过 POST 接收文件。我收到的数据如下:

    val multiPart = call.receiveMultipart()
    val part = multiPart.readPart()

这可行,但每次以这种方式上传文件时,/tmp 文件夹中也会出现一个文件(例如 file-upload11775280475526112.tmp)。有什么办法可以让Ktor服务器响应相应的POST调用后删除这些文件吗?这些文件的大小确实会随着时间的推移而增加。我目前偶尔使用 cron 作业清理它们,但理想情况下我希望服务器自行清理。

您可以在 PartData 对象上调用 dispose 方法来释放与该部分关联的所有资源。这是一个例子:

embeddedServer(Netty, port = 3030) {
    routing {
        post("/") {
            val part = call.receiveMultipart().readPart()

            if (part is PartData.FormItem || part is PartData.BinaryItem) {
                part.dispose()
            }
        }
    }
}.start(wait = true)