从Android本机浏览器上传时,文件类型为空字符串

时间:2014-09-16 16:55:47

标签: javascript android jquery file-upload

我在网页上有input(type="file")

<input type='file' name="file" accept="image/*" />

我使用jQuery来抓取这样的文件:

$('input').on('change', function(e) {
    console.log(e.target.files[0]);
});

我需要检查e.target.files[0].type是否匹配"image.*"模式,所以我这样做: var matches = e.target.files[0].type.match('image.*');

在大多数情况下都可以正常工作,但是当从Android本机浏览器运行应用程序时,e.target.files[0].type为空字符串。如果我选择存储在设备上的图像,就会发生这种情况。如果我使用相机e.target.files[0].type拍摄的照片为"image/jpeg"

之前有没有人遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

由于我已添加评论,因此我尝试使用以下代码段创建用例:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="utf-8" />
  <title>Image Test</title>
</head>

<body>
  <form method="POST" enctype="multipart/form-data">
    <input type="file" accept="image/*" onchange="previewAndUploadFile(event)"/><br/>
    <img id="imagePreview" width="200" height="200"/>
    <div id="imageType"></div>
  </form>
  <script type="text/javascript">
    function previewAndUploadFile(event) {
        var type = document.getElementById("imageType");
        var file = event.target.files[0];
        try {
            var reader = new FileReader()
            reader.onload = function() {
                var preview = document.getElementById("imagePreview");
                preview.src = reader.result;
            }
            reader.readAsDataURL(file);
            type.innerHTML = file.type;
        } catch(e){
            type.innerHTML = "Invalid image.";
        }
    }
  </script>
</body>
</html>
  1. 当文件名为sample.jpeg且图片为有效图片时,一切正常。结果是image/jpeg

  2. 当文件名为sample时(删除文件扩展名但图片内容仍然有效),结果为空字符串。

  3. 当图片损坏时(通过在记事本中进行编辑,您可以尝试其他方式)并且文件名为sample.jpeg,图片类型仍然是image/jpeg

  4. 重复案例-3并将图片重命名为sample,图片类型再次显示为空字符串。

  5. 可能是你的情况就是其中之一。