在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件
Posted
技术标签:
【中文标题】在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件【英文标题】:Put File as Binary with Ktor HttpClient in Kotlin Multiplatform Project 【发布时间】:2021-04-10 03:39:52 【问题描述】:我有一个多平台项目,其中 api 代码在 ios 和 android 之间共享。
有“put” api 可以将本地音频文件作为二进制文件上传。
我已经创建了 httpclient 如下
val client = HttpClient
defaultRequest
url
protocol = ServiceConfiguration.protocol
host = ServiceConfiguration.baseUrl
port = ServiceConfiguration.port
contentType(ContentType.Application.Json)
install(JsonFeature)
val json = kotlinx.serialization.json.Json
ignoreUnknownKeys = true
isLenient = true
serializer = KotlinxSerializer(json)
要将对象放入api中,我这样做如下
val response = ServiceRequest.client.put<String>(
body = File(path).readBytes()
)
它工作正常并将字节数组上传到后端。但我想将文件作为普通二进制文件上传,而不是字节数组。
为了更清楚,在 Postman mac 应用程序中,我们可以将文件上传为二进制文件。我需要做类似的事情。
当我签入 Ktor 时,它显示只有多部分表单数据可以作为二进制提交。但在我的情况下,它是 Put 请求。
请帮忙。
【问题讨论】:
你有没有尝试过类似的方法:suspend fun putMultipart(partData: List似乎没有直接的方法可以将文件作为二进制文件使用 Ktor。
我不得不采用平台相关的方法,例如 Android 的 OkHttpClient 和 iOS 的 URLSession。
【讨论】:
以上是关于在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件的主要内容,如果未能解决你的问题,请参考以下文章
从 ktor 提供 kotlin 多平台 javascript
Ktor 多平台 - 在 kotlin 中用于 iOS 的 SSL 固定
是否可以使用 Ktor 和/或 Kotlin 多平台在 Rest API 和 Android 应用程序之间“共享”公开的数据?