Dan*_*ews 5 javascript html5 android
我正在开发一个网页,用于使用<input type="file" accept="image/*"/>标记从移动设备上传照片.这在iphone和android上的chrome上运行得很漂亮,但是我们遇到问题的地方是使用股票android浏览器.
从图库中选择文件时会出现问题(当您使用相机拍照时,它可以正常工作).我们已经进一步缩小范围,以便从库存浏览器的库中看到数据MIME类型不可用(下面的照片显示了正在加载的数据URL的前100个字符.目标是强制JPEG ,但没有MIME类型,我们无法确定如何解决这个问题.请参阅下面的代码,了解图像的呈现方式.
如何在没有类型的情况下渲染图像?更好的是,有没有人知道为什么这个类型在股票Android浏览器上不可用?
编辑
首先,这些不是相同的图像,它们是在同一时间拍摄的,这不是问题,这就是为什么数据不同(MIME类型没有出现在股票浏览器上的任何图像上,所以这不是问题.
更新
我确认MIME类型是通过将image/jpeg插入到chrome所在的股票浏览器中的问题.不幸的是,我们无法保证它会成为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) {
}
}
Run Code Online (Sandbox Code Playgroud)
铬

股票浏览器

由于问题可能与浏览器相关,并且您无法真正修复浏览器(不过您可以向 Google 报告错误),因此我建议采取不同的路径。
看一下这里: 在 Node.js 中,给定一个 URL,如何检查它是否是 jpg/png/gif?
请参阅已接受答案的评论,其中建议了一种使用文件流检查文件类型的方法。我非常确定这适用于浏览器实现的 Javascript,而不仅仅是 Node.js。