在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件
Put File as Binary with Ktor HttpClient in Kotlin Multiplatform Project
我有一个多平台项目,其中 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 请求。
请帮忙
看起来没有直接的方法可以使用 Ktor 将文件作为二进制文件。
我不得不采用平台相关的方法,例如 Android 的 OkHttpClient 和 iOS 的 URLSession。
我有一个多平台项目,其中 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 请求。
请帮忙
看起来没有直接的方法可以使用 Ktor 将文件作为二进制文件。
我不得不采用平台相关的方法,例如 Android 的 OkHttpClient 和 iOS 的 URLSession。