Ioannis Mavroukakis
10/21/2022, 7:02 AMsetBody(File("some_file.large").readChannel())
unfortunately Ktor sets some headers that upset S3. So the only way out is to specify contentType
and contentLength
but I don't see how I can do this and keep the logic of readChannel
. Any suggestions? Thanks!Ioannis Mavroukakis
10/21/2022, 7:03 AMsetBody(
object : OutgoingContent.WriteChannelContent() {
override val contentType = OctetStream
override val contentLength = archive.fileSize()
override suspend fun writeTo(channel: ByteWriteChannel) {
val readChannel = archive.readChannel()
channel.use {
while (!readChannel.isClosedForRead) {
val packet = readChannel.readRemaining(1024)
while (!packet.isEmpty) {
channel.writePacket(packet)
}
}
}
}
},
)
but I keep running out of memory while uploading a 1G file.Aleksei Tirman [JB]
10/21/2022, 7:29 AMsetBody(object : OutgoingContent.ReadChannelContent() {
override val contentType: ContentType = ContentType.Application.OctetStream
override val contentLength: Long = archive.fileSize()
override fun readFrom(): ByteReadChannel = archive.readChannel()
})
Ioannis Mavroukakis
10/21/2022, 7:50 AMIoannis Mavroukakis
10/21/2022, 7:50 AMIoannis Mavroukakis
10/21/2022, 7:52 AMIoannis Mavroukakis
10/21/2022, 8:23 AMIoannis Mavroukakis
10/21/2022, 8:24 AMIoannis Mavroukakis
10/21/2022, 9:01 AMIoannis Mavroukakis
10/21/2022, 9:05 AMAleksei Tirman [JB]
10/24/2022, 10:47 AMval client = HttpClient(Apache) {
install(HttpTimeout) {
socketTimeoutMillis = 9999999
requestTimeoutMillis = 9999999
}
}
val archive = File("temp_1GB_file")
<http://client.post|client.post>("<https://httpbin.org/post>") {
setBody(object : OutgoingContent.ReadChannelContent() {
override val contentType: ContentType = ContentType.Application.OctetStream
override val contentLength: Long = archive.length()
override fun readFrom(): ByteReadChannel = archive.readChannel()
})
}
Aleksei Tirman [JB]
10/24/2022, 10:48 AMIoannis Mavroukakis
10/24/2022, 11:07 AMIoannis Mavroukakis
10/24/2022, 11:08 AMIoannis Mavroukakis
10/24/2022, 11:09 AMAleksei Tirman [JB]
10/25/2022, 8:29 AMIoannis Mavroukakis
10/25/2022, 8:30 AMIoannis Mavroukakis
10/25/2022, 8:31 AM