【问题标题】:Ktor: delete temporary file after response is sentKtor:发送响应后删除临时文件
【发布时间】:2021-11-07 15:25:36
【问题描述】:

我正在发送一个临时文件,作为对在 Android 平板电脑上使用 ktor 库的请求的响应,但我找不到在发送后安全删除它的方法(或出现问题)。

如何确保在不中断发送过程的情况下删除此文件?也许使用了一些我不知道的回调或方法。

更新:回答 cmets:

我的代码:

try {
    call.response.headers.append("entity-count", entityCount)
    call.response.headers.append("sync-length", lenght)
    call.respondFile(FileContent(file) // need to delete this file after sent OR failed
} catch (e: Exception) {
    Log.e(TAG, e)
}

我应该在 finally 块中添加一个 file.delete() 行吗?

我认为我的主要问题/困惑(来自 java 世界)是否 respondFile 是阻塞调用。如果是这样,只需在 finally 块上添加 file.delete 就可以了,否则我需要注册某种 onCompleted 回调。

【问题讨论】:

  • “不中断发送过程”是什么意思?您使用协程发送数据:当这个挂起函数完成处理返回控制并进入下一行(或抛出错误)时,这意味着您可以清除您的资源。
  • 如果您使用ApplicationCall.respondFile,则文件将在发送过程结束时关闭。您能否使用代码 sn-p 更新您的问题?
  • @PhilipDukhov,刚刚更新了我的问题

标签: android kotlin ktor


【解决方案1】:

可以使用finally:发送文件后或出错时调用

try {
    call.response.headers.append("entity-count", entityCount)
    call.response.headers.append("sync-length", lenght)
    call.respondFile(FileContent(file) // need to delete this file after sent OR failed
} catch (e: Exception) {
    Log.e(TAG, e)
} finally {
    file.delete()
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2022-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多