【问题标题】:Issue with stock Browser picking photos from Gallery股票浏览器从图库中挑选照片的问题
【发布时间】:2013-07-25 14:52:45
【问题描述】:

我正在开发一个使用<input type="file" accept="image/*"/> 标签从移动设备上传照片的网页。这在 iphone 和 android 上的 chrome 上运行良好,但我们遇到问题的地方是库存的 android 浏览器。

当您从图库中选择一个文件时会出现此问题(当您使用相机拍照时它可以正常工作)。我们进一步缩小范围,发现从股票浏览器的图库中获取数据 MIME 类型不可用(下面的照片显示正在加载的数据 URL 的前 100 个字符。目标是强制 JPEG ,但如果没有 MIME 类型,我们无法确定如何解决此问题。请参阅下面的代码了解图像的渲染方式。

如何在没有类型的情况下呈现图像?更好的是,有人知道为什么该类型在现有的 android 浏览器上不可用吗?

编辑

首先,这些不是同一张图片,它们是在同一时间拍摄的,这不是问题,这就是数据不同的原因(MIME 类型不会出现在股票浏览器上的任何图像上,所以这就是不是问题。

更新

我通过将 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

股票浏览器

【问题讨论】:

  • 您不会错过传递给append 函数的对象的idload 属性之间的逗号吗?此外,alert("Render") 后面的分号也不见了。
  • 实际上有一个逗号,我只是在清理我的代码时不小心删除了它。 alert("Render") 确实缺少分号,但这只是为了我的调试目的,在我修复之后我仍然遇到问题
  • 好的..无论如何,试试这个jsfiddle:jsfiddle.net/MGB3y/11。这是基于您的代码的简化示例。它适用于我的 HTC 库存浏览器(android 4.0.3)。这有帮助吗?
  • 不,在我运行 4.1.2 的 HTC 上与之前的问题相同
  • 当它起作用时,你是从画廊中挑选的吗?那是它对我来说坏掉的时候,但它直接从相机工作

标签: javascript android html


【解决方案1】:

由于问题可能与浏览器有关,并且您无法真正修复浏览器(不过您可以向 Google 报告错误),我建议采用不同的路径。

看这里: In Node.js, given a URL, how do I check whether its a jpg/png/gif?

查看已接受答案的 cmets,它建议了一种使用文件流检查文件类型的方法。我很确定这将适用于浏览器实现的 Javascript,而不仅仅是在 Node.js 中。

【讨论】:

  • 谢谢,看起来是这样......我现在实际上正在度假,所以很遗憾我无法测试这个
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-10
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 2015-05-07
  • 1970-01-01
  • 2013-04-24
相关资源
最近更新 更多