Kotlin使用window.fetch API获取二进制数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin使用window.fetch API获取二进制数据相关的知识,希望对你有一定的参考价值。

我的目标是在JS实际的多平台项目类中实现Http请求调用。

http请求应返回二进制数据

我的Response普通类看起来很简单

class Response(val binaryData: ByteArray) {
    var code: Int = 0
    var message: String? = null
    var headers: Map<String, String>? = null
    var body: ByteArray = binaryData
}

数据应以ByteArray的形式提供

现在获取逻辑看起来像

actual class Call(var request: Request) {
    actual fun enqueue(responseCallback: Callback) {
        window.fetch(request.url).then(onFulfilled = { response ->
            response.arrayBuffer().then(onFulfilled = {
                responseCallback.onResponse(this, Response(it))
            }, onRejected = { error ->
                responseCallback.onFailure(this, Exception(error.message))
            })

    }
}

response.arrayBuffer()具有ArrayBuffer类型,而它在Response(it)中应该是ArrayByte

我试了一段时间谷歌搜索。不幸的是,我没有找到任何解决方案。

任何人都可以帮助我应对转换类型问题

提前致谢

答案

如果我理解你的问题是正确的,正确的解决方案可能是从Int8Array建立ArrayBuffer并将其投射到像这样的ByteArray

Int8Array(it).unsafeCast<ByteArray>()

以上是关于Kotlin使用window.fetch API获取二进制数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在 TypeScript 中使用 fetch

如何将 window.fetch() 与 httpOnly cookie 或基本身份验证一起使用

如何使用 window.fetch 下载文件?

@testing-library/与 msw/node 反应; window.fetch 未在 POST 上返回正文

将 Json 字符串解析为 Kotlin 对象会与 Jackson 一起引发 InvalidDefinitionException

Kotlin 协程协程底层实现 ① ( Kotlin 协程分层架构 | 基础设施层 | 业务框架层 | 使用 Kotlin 协程基础设施层标准库 Api 实现协程 )