无法将Uint8Array更改为blob

时间:2013-03-13 11:05:05

标签: javascript html5 webkit blob

我正在写一些采用画布(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,因此我不必担心其他类型的浏览器。 感谢。

0 个答案:

没有答案