Javascript 发布包装在对象中的ArrayBuffer

Javascript 发布包装在对象中的ArrayBuffer,javascript,jquery,ajax,arraybuffer,Javascript,Jquery,Ajax,Arraybuffer,我写了一点AJAX,它可以在客户端获得一个文件,这样我就可以将它发布回服务器。对象作为ArrayBuffer获取。但是,在将这个二进制文件发回服务器进行保存时,我需要在这个文件中包含一些元数据。我曾尝试在和对象中使用其他字符串包装ArrayBuffer,但当我检查数据服务器端时,它似乎只传输了ArrayBuffer的长度 我已尝试通过以下答案将ArrayBuffer转换为字符串: 但是,我的ArrayBuffer的bytellength是519843,这导致了异常: 未捕获范围错误:Array

我写了一点AJAX,它可以在客户端获得一个文件,这样我就可以将它发布回服务器。对象作为
ArrayBuffer
获取。但是,在将这个二进制文件发回服务器进行保存时,我需要在这个文件中包含一些元数据。我曾尝试在和对象中使用其他字符串包装
ArrayBuffer
,但当我检查数据服务器端时,它似乎只传输了
ArrayBuffer
的长度

我已尝试通过以下答案将
ArrayBuffer
转换为字符串:

但是,我的
ArrayBuffer
的bytellength是519843,这导致了异常:

未捕获范围错误:ArrayBuffer长度减去字节偏移量不是元素大小的倍数

我对ArrayBuffers的理解很少,我读过MDN文档,但找不到更多其他内容。我非常感谢您提供更多的资源或想法,让我了解如何将这个
ArrayBuffer
转换为字符串或将我的
ArrayBuffer
包装成一个对象

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);
以下是我的AJAX代码片段:

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

就这样记录下来,谢谢@Markus在评论中。使用UInt8Array是可行的。我还发现这个问题正好记录了我所需要的内容:

在我的问题中使用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);
var binary_string=''
字节=新的Uint8Array(来自ajax get的ArrayBuffer对象);
对于(var i=0;i
您是否尝试过使用
UInt8Array
而不是
UInt16Array
?实际上我刚刚尝试过,效果不错。为什么会这样?我的印象是长度不能被8或16整除,所以这些是错误的宽度数组。这是一个明显的疏忽。非常感谢!