【发布时间】:2014-01-15 17:02:58
【问题描述】:
问题与What's the difference between BlobBuilder and the new Blob constructor?不重复
我正在做网络应用程序。上传图片我使用Blob,以防万一BlobBuilder。 Blob 运行良好,但 Blob 在 android 原生浏览器 上不起作用,android 原生浏览器使用 BlobBuilder。我预计,Blob 和 BlobBuilder 返回相同的 blob,但他们没有。这是我的代码:
base64toBlob: function(b64Data, contentType, sliceSize) {
var BlobBuilder, blob, byteArray, byteCharacters, byteNumbers, charCodeFromCharacter, err, posIndex;
if (contentType == null) {
contentType = '';
}
if (sliceSize == null) {
sliceSize = 1024;
}
posIndex = b64Data.indexOf('base64,');
if (posIndex !== -1) {
b64Data = b64Data.substring(posIndex + 7);
}
charCodeFromCharacter = function(c) {
return c.charCodeAt(0);
};
byteCharacters = atob(b64Data.replace(/\s/g, ''));
byteNumbers = Array.prototype.map.call(byteCharacters, charCodeFromCharacter);
byteArray = new Uint8Array(byteNumbers);
try {
blob = new Blob([byteArray.buffer], {
type: contentType
});
return blob;
} catch (_error) {
err = _error;
BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder;
blob = new BlobBuilder();
blob.append(byteArray.buffer);
return blob.getBlob(contentType);
}
}
我在发送请求时记录了日志
blobImg = base64toBlob(base64Data, imageType);
alert(JSON.stringify(blobImg));
// alert shows {"type": "image/jpeg", "size": 10251 } when blob worked
// alert shows {"type": "image/jpeg", "size": 27822 } when blobbuilder worked
ajaxRequest.send(blobImg);
我尝试在所有浏览器上上传同一张图片。在 Chrome 和其他浏览器上,我从日志 {"type": "image/jpeg", "size": 10251 } 获取并请求发送成功,但在 android 本机浏览器上,我得到 {"type": "image/jpeg", "size": 27822 } 并且请求失败,状态码为 0。在 android 浏览器上工作 catch 部分(我猜,这意味着 Android 原生浏览器不支持 Blob)我在 android 4.1.2 中测试过。我从谷歌没有发现任何关于这个问题的信息。如果有人帮助我,我会很高兴!
【问题讨论】:
-
我有同样的问题。你知道如何解决这个问题吗?也可以接受一种解决方法。高级赞赏。
-
@ablian,我创建了一个答案
标签: javascript blob android-browser