如何使用ktor客户端作为multipart/form-data发布文件?我想将其用于电报机器人API“发送文档”。 我需要实现与curl命令相同的结果。
curl -F document=@"path/to/some.file" https://api.telegram.org/bot<token>/sendDocument?chat_id=<chat_id>
如何使用ktor客户端作为multipart/form-data发布文件?我想将其用于电报机器人API“发送文档”。 我需要实现与curl命令相同的结果。
curl -F document=@"path/to/some.file" https://api.telegram.org/bot<token>/sendDocument?chat_id=<chat_id>
您可以使用submitFormWithBinaryData方法发送mutlipart/form-data请求。以下是解决方案:
val client = HttpClient(Apache) {}
val file = File("path/to/some.file")
val chatId = "123"
client.submitFormWithBinaryData(
url = "https://api.telegram.org/bot<token>/sendDocument?chat_id=$chatId",
formData = formData {
append("document", file.readBytes(), Headers.build {
append(HttpHeaders.ContentDisposition, "filename=${file.name}")
})
}
)
如果文件很大,您不会想将整个文件读入内存。相反,您可以流式传输上传。
val file = File("path/to/some.file")
client.submitFormWithBinaryData(
url = "https://api.telegram.org/bot<token>/sendDocument?chat_id=$chatId",
formData = formData {
append(
"document".quote(),
InputProvider(file.length()) { file.inputStream().asInput() },
Headers.build {
append(HttpHeaders.ContentDisposition, "filename=${file.name.quote()}")
}
)
}
)