0

我写了一点 AJAX 来获取文件客户端,以便我可以将其发布回服务器。被反对的对象作为ArrayBuffer. 但是,在将此二进制文件发布回服务器进行保存后,我需要在此文件中包含一些元数据。我已经尝试将ArrayBuffer其他字符串包装在和对象中,但是当我检查数据服务器端时,它似乎只传输了ArrayBuffer.

我尝试ArrayBuffer通过此答案将其转换为字符串:

https://stackoverflow.com/a/11058858/449511

但是, myArrayBuffer的字节长度是 519843,这会导致异常:

未捕获的 RangeError:ArrayBuffer 长度减去 byteOffset 不是元素大小的倍数。

我的理解ArrayBuffers是稀疏的,我已经阅读了 MDN 文档,但找不到太多其他内容。我很感谢有关如何将其转换ArrayBuffer为字符串或将其包装ArrayBuffer成对象的任何其他资源或想法。

这是我的 AJAX 代码片段:

$.ajax({
  type: 'POST',
  url:  'http://localhost:5000/',
  data: {fname: f, url:u, binary:b},  // the binary is an ArrayBuffer
});
4

1 回答 1

0

就这样记录在案,感谢评论中的@Markus。使用 UInt8Array 有效。此外,我刚刚发现这个问题可以准确记录我需要的内容:Getting BLOB data from XHR request

使用我的问题中链接的 ArrayBuffer to String 答案不适用于大文件,因此我编写了一个迭代版本并在发布到对象之前转换为 base64。

var binary_string = ''
bytes = new Uint8Array(ArrayBuffer object from ajax get);
for (var i = 0; i < bytes.byteLength; i++) {
    binary_string += String.fromCharCode(bytes[i]);
}
base64_string = window.btoa(binary_string);
于 2012-11-26T05:58:27.287 回答