【发布时间】:2013-03-26 14:04:25
【问题描述】:
我正在创建一个用于调整照片大小并上传照片的手机网站。
$('#ImgPreview canvas').each(function(pIndex) {
vFormData.append(pIndex, canvasToJpegBlob($(this)[0]), vIssueId +'-attachment0'+ pIndex +'.jpg');
});
$.ajax({
url: '/api/ob/issuefileupload',
data: vFormData,
processData: false,
contentType: false,
type: 'POST'
}).done(function(pData) {
window.location = '/issue?id='+ vIssueId;
}).fail(function(pJqXHR) {
alert(My.Strings.UploadFailed);
});
这适用于 Android 版 Chrome 和 iOS 版 Safari,但在原生 Android 浏览器中,文件的内容长度为 0,名称为 Blob + UID。当文件被添加到 formdata 时,其大小似乎也相当大(900k 与 Chrome 中的 50k 相比)。
canvasToJpegBlob 函数:
function canvasToJpegBlob(pCanvas) {
var vMimeType = "image/jpeg",
vDataURI,
vByteString,
vBlob,
vArrayBuffer,
vUint8Array, i,
vBlobBuilder;
vDataURI = pCanvas.toDataURL(vMimeType, 0.8);
vByteString = atob(vDataURI.split(',')[1]);
vArrayBuffer = new ArrayBuffer(vByteString.length);
vUint8Array = new Uint8Array(vArrayBuffer);
for (i = 0; i < vByteString.length; i++) {
vUint8Array[i] = vByteString.charCodeAt(i);
}
try {
vBlob = new Blob([vUint8Array.buffer], {type : vMimeType});
} catch(e) {
window.BlobBuilder = window.BlobBuilder ||
window.WebKitBlobBuilder ||
window.MozBlobBuilder ||
window.MSBlobBuilder;
if (e.name === 'TypeError' && window.BlobBuilder) {
vBlobBuilder = new BlobBuilder();
vBlobBuilder.append(vUint8Array.buffer);
vBlob = vBlobBuilder.getBlob(vMimeType);
} else if (e.name === 'InvalidStateError') {
vBlob = new Blob([vUint8Array.buffer], {type : vMimeType});
} else {
alert(My.Strings.UnsupportedFile);
}
}
return vBlob;
}
有没有办法让它在原生 Android 浏览器中运行?
【问题讨论】:
-
嘿,如果你有这个工作的机会,我遇到了完全相同的问题!
-
不,还没有找到任何解决方案。
-
我们也遇到了同样的问题——我加了一个赏金。
-
android 上似乎还没有 jpeg? github.com/scottjehl/Device-Bugs/issues/33 。较大的 png (900kb) 可能是正常操作...
-
这是一个 Android 错误:code.google.com/p/android/issues/detail?id=22441 - 我自己也有同样的问题。
标签: javascript android