我正在开发一个用于从移动设备上传照片的网页,使用<input type="file" accept="image/*"/>
标签。这在 iPhone 和 Android 上的 Chrome 上运行得很好,但我们遇到的问题是 Android 浏览器的问题。
当您从图库中选择文件时就会出现问题(当您使用相机拍照时效果很好)。我们进一步缩小了范围,发现从图库浏览器上获取数据时,数据 MIME 类型不可用(下面的照片显示了正在加载的数据 URL 的前 100 个字符。目标是强制使用 JPEG ,但是如果没有 MIME 类型,我们无法确定如何解决此问题。请参阅下面的代码了解图像的渲染方式。
没有类型如何渲染图像?更好的是,有人知道为什么该类型在 Android 浏览器上不可用吗?
EDIT
首先,这些不是同一张图像,它们是在同一时间拍摄的,这不是问题,这就是数据不同的原因(MIME 类型不会出现在库存浏览器上的任何图像上,所以这不是问题。
Update
我通过将 image/jpeg 插入 Chrome 上的库存浏览器来确认 MIME 类型是问题所在。不幸的是,我们无法保证它是 jpeg,所以我们又不能那样做
_readInputFile: function (file, index) {
var w = this, o = this.options;
try {
var fileReader = new FileReader();
fileReader.onerror = function (event) {
alert(w._translate("There was a problem opening the selected file. For mobile devices, some files created by third-party applications (those that did not ship with the device) may not be standard and cannot be used."))
$('#loadingDots').remove();
return false;
}
fileReader.onload = function (event) {
var data = event.target.result;
//alert(data.substring(0,100));
//var mimeType = data.split(":")[1].split(";")[0];
alert("Load Image"); //I get to this point
$('#' + w.disp.idPrefix + 'hiddenImages').append($('<img />', {
src: data,
id: "dummyImg" + index,
load: function(){
var width = dummy.width();
var height = dummy.height();
$('#dummyImg' + index).remove();
alert("Render"); // I don't get here
var resized = w._resizeAndRenderImage(data, null, null, biOSBugFixRequired, skewRatio, width, height);
alert("Image Rendered"); // I don't get here
}
}));
}
fileReader.readAsDataURL(file);
}
catch (e) {
}
}
Chrome
Stock Browser