我写了一些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
});
答案 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);