POST一个包裹在对象内的ArrayBuffer

时间:2012-11-26 05:27:26

标签: javascript jquery ajax arraybuffer

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

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

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

但是,我ArrayBuffer的字节长度是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
});

1 个答案:

答案 0 :(得分: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);
相关问题