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

问题描述 投票:6回答:1

我在网页上有一个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"

以前有人遇到过这个问题吗?

javascript android jquery file-upload
1个回答
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,图像类型再次变为空字符串。

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

© www.soinside.com 2019 - 2024. All rights reserved.