Tóth István Zoltán
07/23/2025, 6:24 PMprivate suspend fun Blob.asByteArray(): ByteArray {
//<https://developer.mozilla.org/en-US/docs/Web/API/Blob/arrayBuffer>
val buffer = asDynamic().arrayBuffer() as Promise<ArrayBuffer>
return Int8Array(buffer.await()).unsafeCast<ByteArray>()
}
Robert Jaros
07/23/2025, 6:35 PMjs.reflect.Reflect
for pseudo-dynamic code if you use kotlin-wrappers library instead of stdlib browser apis.Robert Jaros
07/23/2025, 6:36 PMRobert Jaros
07/23/2025, 6:37 PMRobert Jaros
07/23/2025, 6:39 PMjs()
functions for most dynamic things.Tóth István Zoltán
07/23/2025, 6:39 PMRobert Jaros
07/23/2025, 6:39 PMTóth István Zoltán
07/23/2025, 6:39 PMTóth István Zoltán
07/23/2025, 6:40 PMTodd
07/23/2025, 10:19 PMfun Blob.arrayBuffer(): Promise<ArrayBuffer> = arrayBuffer(this)
private fun arrayBuffer(blob: Blob): Promise<ArrayBuffer> = js("blob.arrayBuffer()")
fun ArrayBuffer.toByteArray(): ByteArray =
Int8Array(buffer = this, 0, byteLength).toByteArray()
Then I was using it like
blob.arrayBuffer().await<ArrayBuffer>().toByteArray()
Only problem is it requires a copy from Int8Array toByteArray. There's might be a way to not need the copy but I haven't spent any extra time on it yet.