IE 11和IE Edge获取file.type失败

时间:2015-09-29 16:18:15

标签: html internet-explorer-11 microsoft-edge

"change .btn-file :file"       : "getfileinfo",

getfileinfo: function(e){

    var fileInput = document.getElementById('fileupload');
    var file = fileInput.files[0];

    if(!file || (file.type != 'text/plain' && file.type != 'text/csv' && file.type != 'application/csv' && file.type != 'application/vnd.ms-excel' && file.type != 'text/csv')){
        $('.alert-file').show();
        $('.alert-file').delay(4000).fadeOut('slow');
        return false;
    }
    var reader = new FileReader();

    reader.onload = function(e) {
        $('#fileData').val(reader.result);
        $('#fileName').val(file.name); 

    };
    reader.readAsDataURL(file);

}
如果我在IE11和IE Edge中使用,

file.type为null。所有其他浏览器工作正常。

有人可以帮我吗?

2 个答案:

答案 0 :(得分:4)

测试用例

<input type="file" onchange="document.body.innerText = this.files[0].type" />

返回SVG,PNG,ZIP的MIME,但返回PDF的""

在Windows 8.1 Pro x64下在IE11上重现

Version: 11.0.9600.18053
Update Versions: 11.0.24 (KB3093983)

已经报告错误并因“无法重现”https://connect.microsoft.com/IE/Feedback/Details/2009205而关闭。它提到了为什么IE团队无法重现:

  

请记住,当系统上安装了该MIME类型的处理程序应用程序(例如Adobe Reader)并在注册表的HKEY_CLASSES_ROOT注册表配置单元内创建映射时,IE只能根据其扩展名确定文件的MIME类型。如果注册表中不存在映射,则IE无法知道该文件的MIME类型。

在20 GB新安装的Windows中,没有空间放置file工具

答案 1 :(得分:1)

我能够在免费的Windows 7 / IE 11 VM(available here)上重现此错误,这个错误的关键是没有默认的PDF处理程序,因此不知道mimetype是什么。

因此,我提出的唯一解决方法是(作为PDF文件的示例 - 根据需要更改application / pdf和pdf):

if(file.type == 'application/pdf' || file.name.toLowerCase().endsWith('pdf'))
{
    //code to execute
}

请注意,如果没有针对所有版本的IE的polyfill for endsWith,这将无法正常工作 - 所以这里是您需要在代码中的任何位置包含的polyfill片段(来自Mozilla page here)< / p>

if (!String.prototype.endsWith) {
  String.prototype.endsWith = function(searchString, position) {
      var subjectString = this.toString();
      if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
        position = subjectString.length;
      }
      position -= searchString.length;
      var lastIndex = subjectString.lastIndexOf(searchString, position);
      return lastIndex !== -1 && lastIndex === position;
  };
}