android - 在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件

标签 android kotlin kotlin-multiplatform ktor ktor-client

我有一个多平台项目,其中 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。

关于android - 在 Kotlin 多平台项目中使用 Ktor HttpClient 将文件作为二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65561095/

相关文章:

android - 删除任何 View 时,不会调用 PageAdapter 的 destroyItem 函数

java - 图表周围的边框 teechart

android - 在哪里可以找到 aapt2 日志?

具有新数据绑定(bind)导入的 Android Studio 3.2.1 无法编译

ios - 无法将 FirebaseAnalytics 或 Crashlytics cocoapod 添加到 kotlin 多平台共享模块

kotlin - 如何在 kotlin native 中使用 swift 库?

AndroidX 错误 : Both old and new data binding packages are available in dependencies. 我正在将 flutter 项目升级到 AndroidX

android - 如何恢复 Activity 而不是开始其副本

android - 检测 Room 何时完成运行迁移

maven - 使用 Gradle Kotlin DSL 发布 Kotlin MPP 元数据