【问题标题】:IE 11 and IE Edge get file.type failedIE 11 和 IE Edge 获取 file.type 失败
【发布时间】:2015-12-27 05:32:59
【问题描述】:
"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);

}

file.type 如果我在 IE11 和 IE Edge 中使用,则为 null。所有其他浏览器工作正常。

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 请格式化您的代码。
  • 在问之前也做一些头脑风暴。你没见过stackoverflow.com/questions/27980428/…
  • 是的,我看到了,但没有答案
  • 我没有看到null;你能测试一下jsfiddle.net/w7dLjvxt吗?
  • 你检查过 IE EDGE 吗?我在win10 IE边缘测试。即使我测试你的代码 [object File]{lastModifiedDate: date, name: "sample.csv", size: 236, type: ""} 。查看控制台

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


【解决方案1】:

我能够在免费的 Windows 7 / IE 11 虚拟机 (available here) 上重现此错误,它没有附带默认的 PDF 处理程序,因此不知道 mimetype 是什么。

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

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

请注意,在所有版本的 IE 上,如果没有用于 endsWith 的 polyfill,这将无法工作 - 所以这是你需要在代码中的任何位置包含的 polyfill sn-p(来自 Mozilla page here

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;
  };
}

【讨论】:

    【解决方案2】:

    测试用例

    <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 类型的处理程序应用程序(例如 Adob​​e Reader)并在注册表的 HKEY_CLASSES_ROOT 注册表配置单元内创建映射时,IE 只能根据文件的扩展名确定文件的 MIME 类型。如果注册表中不存在映射,则 IE 无法知道文件的 MIME 类型。

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

    【讨论】:

    • 答案如何?
    • @Bonatti 无法重现,我已经清理了测试用例(源代码清晰度和文件类型),描述了确切的环境,应该会有所帮助
    • stackoverflow 中的答案应该是 OP 解决他/她的问题的一种方式,或者是一种查找文档以理解问题的方式......你的答案既不是,也应该是新人检查您的“答案”,他仍然不明白该怎么做...Please, read this link
    • 至少他在看到最新最好的 IE 中的 bug 时相信自己的眼睛。唯一真正的 答案来自 IE 团队 - 修复错误。这需要注意和测试用例。我能做的就这些了
    • 当问为什么file.type 是空的时,不是被告知“它可能永远不会被填写”吗?这样,开发人员可以确定他们必须使用他们选择的替代 hack,或者放弃该功能以支持类似的东西。
    猜你喜欢
    • 2017-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2019-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多