如何使用JavaScript FileReader检测文件扩展名

25
我正在使用JavaScript的FileReader和自定义函数来读取JPG-JPEG图像, 我的问题是如何通过下面的代码检测文件扩展名,并在文件不是JPG-JPEG时向用户发出错误提示:

我使用JavaScript的FileReader和自定义函数来读取JPG-JPEG图片, 我的问题是如何通过下面的代码检测文件扩展名,并在文件不是JPG-JPEG时向用户发出错误提示:

function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();

    reader.onload = function (e) {
      alert('image has read completely!');
    }

    reader.readAsDataURL(input.files[0]);
  }
}

1
只需要获取文件的 .name,无需实际读取文件。 - Bergi
但是我想先读取文件。 - Baya
没有任何阻碍你阅读它,但这并不是获取名称所必需的。 - Bergi
请注意,这可能是一个XY问题:您真正想要检查MIME类型:https://dev59.com/w2Ml5IYBdhLWcg3wkXpx#29672957 - Toastrackenigma
2个回答

48

你可以尝试这个,我将您的代码更改如下:

var fileTypes = ['jpg', 'jpeg', 'png', 'what', 'ever', 'you', 'want'];  //acceptable file types

function readURL(input) {
    if (input.files && input.files[0]) {
        var extension = input.files[0].name.split('.').pop().toLowerCase(),  //file extension from input file
            isSuccess = fileTypes.indexOf(extension) > -1;  //is extension in acceptable types

        if (isSuccess) { //yes
            var reader = new FileReader();
            reader.onload = function (e) {
                alert('image has read completely!');
            }

            reader.readAsDataURL(input.files[0]);
        }
        else { //no
            //warning
        }
    }
}

5

没有直接的接口来读取文件扩展名。您至少有两个选择:

  • 使用正则表达式从文件名中提取扩展名
  • 使用文件的内容类型作为过滤器

对于扩展名方法,可以像这样:

var extension = fileName.match(/\.[0-9a-z]+$/i);

我非常喜欢正则表达式,比起分割字符串和删除字符等操作更加得心应手。谢谢你的建议! - LinusGeffarth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接