【问题标题】:Upload Multiple Files With Ktor使用 Ktor 上传多个文件
【发布时间】:2023-02-01 21:33:07
【问题描述】:
我正在使用 ktor 和 kmm 将图像列表上传到服务器
但是文档中没有可用的指南让我上传文件列表
我正在将我的文件转换为字节数组并上传它们
我试过这样上传
mainClient.post {
setBody(
MultiPartFormDataContent(
formData {
append("attachments[]", listOf(toBytes(kmmFile),toBytes(kmmFile)) )
}
)
)
}
但连接被拒绝
【问题讨论】:
标签:
kotlin
multipart
kotlin-multiplatform
ktor
ktor-client
【解决方案1】:
您可以遍历集合中的所有字节数组并为它们中的每一个调用 append 方法。这是一个例子:
val images: List<ByteArray> // assigned externally
val response = client.post("https://httpbin.org/post") {
setBody(MultiPartFormDataContent(
formData {
for (bytes in images) {
append("attachments[]", bytes)
}
}
))
}
【解决方案2】:
我使用下面的代码上传单个文件并在调用此方法时运行 forEach(对于每个 n 追加对我来说不起作用)。我认为您的服务必须支持同时上传多个文件。
override suspend fun upload(
uploadFiles: Map<String, File>,
texts: Map<String, String>
): ResultWrapper<ResponseData<List<UploadFileDto>>> {
return {
httpClient.submitForm {
url(BASE_URL + "api/v1/static/upload-file")
method = HttpMethod.Post
setBody(MultiPartFormDataContent(
formData {
headers {
append(
"document",
uploadFiles.entries.first().value.readBytes(),
Headers.build {
append(
HttpHeaders.ContentDisposition,
"filename=${uploadFiles.entries.first().value.name}"
)
})
}
}
))
}.body()
}