Javascript 使用XHR在WebKit/Chrome中上载二进制字符串(相当于Firefox的sendAsBinary)
我正在开发一个webapp,它使用了几个最前沿的WebKit功能。它基本上是这样做的:使用Javascript 使用XHR在WebKit/Chrome中上载二进制字符串(相当于Firefox的sendAsBinary),javascript,upload,binary,xmlhttprequest,Javascript,Upload,Binary,Xmlhttprequest,我正在开发一个webapp,它使用了几个最前沿的WebKit功能。它基本上是这样做的:使用FileReader读取本地文件,使用JavaScript解压库将每个文件解压为字符串,并使用XMLHttpRequest发布每个文件。这对文本文件非常有效,但不幸的是它会损坏二进制文件(在本例中为图像)。Firefox有一个sendAsBinary方法可以解决这个问题,但它是非标准的,更重要的是,它不适用于WebKit/Chrome,我们依赖它来实现其他功能 有很多变通方法,但到目前为止,没有一种适合我:
FileReader
读取本地文件,使用JavaScript解压库将每个文件解压为字符串,并使用XMLHttpRequest发布每个文件。这对文本文件非常有效,但不幸的是它会损坏二进制文件(在本例中为图像)。Firefox有一个sendAsBinary
方法可以解决这个问题,但它是非标准的,更重要的是,它不适用于WebKit/Chrome,我们依赖它来实现其他功能
有很多变通方法,但到目前为止,没有一种适合我:
- 在长字符串()中模拟具有标题、边界等的文件上载请求
- 在xhr对象()上设置一组标题
- 使用
,将字符串附加到生成器,并使用BlobBuilder
获取要上载的blob(在Chrome发布线程中)getBlob
最重要的是,我正在寻找一个向前兼容的解决方案。谢谢 您可以使用base64对其进行编码,然后在服务器上对其进行解码。我也遇到了同样的问题 这一个对我有用:
XMLHttpRequest.prototype.sendAsBinary = function(datastr) {
function byteValue(x) {
return x.charCodeAt(0) & 0xff;
}
var ords = Array.prototype.map.call(datastr, byteValue);
var ui8a = new Uint8Array(ords);
this.send(ui8a.buffer);
}
检查此处:如果您可以轻松访问请求的服务器。我尝试从我的域访问couchdb(允许CORS)以将附件放在doc()上。我会试试塞巴斯蒂安的把戏。