在JavaScript的ArrayBuffer中访问Uint8Array

45

我有一个由FileReader ReadAsArrayBuffer方法生成的JavaScript ArrayBuffer,它是从JPEG文件中生成的。

我正在尝试访问ArrayBuffer的UInt32数组,并将其发送到WCF服务(最终插入到服务器上的数据库中)。

在stackoverflow上我看到了一个例子(byte array method),其中UnInt32数组被转换为字节数组,我认为这个方法可以起作用。

我正在尝试访问下面我的arrayBuffer变量的[[Uint8Array]],以便我可以将其发送到WCF,但我没有太大的成功。 我已经尝试过:

   var arrayBuffer = reader.result[[Uint8Array]];//nope
     var arrayBuffer = reader.result[Uint8Array];//nope
     var arrayBuffer = reader.result.Uint8Array;//nope
     var arrayBuffer = reader.result[1];//nope

希望能得到关于如何访问该{{Uint8Array}}的任何想法。当整个{{ArrayBuffer}}被发送到WCF服务时,我会收到一个0字节的数组--无法读取。

谢谢,

Pete

enter image description here

1个回答

84
这些属性实际上并不存在于 ArrayBuffer 对象中。它们是由 Dev Tools 窗口放置在那里以查看 ArrayBuffer 的内容。
您需要通过构造函数语法来创建所需的 TypedArray。
new TypedArray(buffer [, byteOffset [, length]]);
所以在您的情况下,如果您想要Uint8Array,您需要执行以下操作:
var uint8View = new Uint8Array(arrayBuffer);

谢谢。现在我必须让WCF服务读取/接受UIntArray。 - pvitt
1
出现错误:类型“string | ArrayBuffer”的参数无法分配给类型“ArrayBuffer | ArrayLike<number> | SharedArrayBuffer”。 类型“string”无法分配给类型“ArrayBuffer | ArrayLike<number> | SharedArrayBuffer”。ts(2769) - Sreeraj_ms
@Sreeraj_ms 您需要指定 arrayBuffer 的类型: var uint8View = new Uint8Array(arrayBuffer as ArrayBuffer); - Guillaume Renoult

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接