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