我正在写一些采用画布(1位像素颜色深度)的东西,将其转换为Uint8Array(一个字节代表8个像素),然后在接收其他类似编码的消息时将其发送出去。
我认为blob非常适合这种数据,我创建一个blob,创建FormData,将blob附加到FormData然后像这样发送:
function sendFormData(data){
//data.data is a Uint8Array other attributes are strings
var bytesBlob = new Blob([data.data],{type: "application/octet-stream"});
console.log(bytesBlob,data.data);
var form = new FormData();
var request = new XMLHttpRequest();
form.append("blob",bytesBlob,"message");
form.append("user",data.user);
form.append("colour",data.colour);
form.append("room",currentRoom);
request.open("POST","http://localhost:8080/",true);
request.send(form);
}
现在,在创建blob后使用console.log我可以看到blob的长度,应该是2035并且在Chrome中,但在其他webkit浏览器(Safari)上,大小为19。 / p>
这是因为,不是用Uint8Array制作一个blob,而是用“[object Uint8Array]”这个词来制作一个blob,这显然对任何人都没用。
当我从服务器下载其中一个blob时,我看到了这一点:
$ cat blob-1 [object Uint8Array]
我想这是Uint8Array对象在某个时刻获取toString()的结果,所以如何确保它作为实际二进制数据发送?
我想知道我是否正确地使用blob或者什么是发送数据的最佳方法? 特别是因为目标平台似乎引发了异常而停止而不是臃肿“[对象Uint8Array]”
目标平台仅限Webkit,因此我不必担心其他类型的浏览器。 感谢。