我正在写一些东西,它需要一个画布(具有 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。
这是因为,它不是从 Uint8Array 中创建一个 blob,而是从“[object Uint8Array]”这个词中创建一个 blob,这显然对任何人都没有用。
当我从服务器下载其中一个 blob 时,我看到了这一点:
$ cat blob-1 [object Uint8Array]
我猜这是 Uint8Array 对象在某个时候得到 toString() 的结果,那么我如何确保它作为实际的二进制数据发送?
我想知道我是否正确地处理了这个问题,使用 blob 或发送数据的最佳方法是什么?特别是因为目标平台似乎引发了异常并停止而不是使“[object Uint8Array]”
目标平台只是 Webkit,所以我不必担心其他类型的浏览器。谢谢。