2015-09-29 112 views
3
"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。所有其他浏览器工作正常。IE 11和IE Edge获取file.type失败

有人可以帮助我吗?

+0

请格式化你的代码。 –

+0

在询问之前也做一些头脑风暴。你有没有看过http://stackoverflow.com/questions/27980428/javascript-file-type-is-not-working-on-ie-11 –

+0

是的,但我看到,但没有答案 – Gopi

回答

0

测试用例

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

回报MIME为SVG,PNG,ZIP,但对于PDF

的Windows 8.1专业版64位下重现了IE11

Version: 11.0.9600.18053 
Update Versions: 11.0.24 (KB3093983) 
返回 ""

B ug已经报告并且以“无法复制”https://connect.microsoft.com/IE/Feedback/Details/2009205关闭。它提到为什么IE团队无法重现:

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

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

+0

这是一个怎样的答案? – Bonatti

+0

@Bonatti这是不可能重现,我已经清理了测试用例(源代码清晰度和文件类型),描述确切的环境,应该帮助 – sergeykish

+0

在stackoverflow中的答案应该是一种方法为OP来解决他/她的问题,或寻找文件来了解问题的方法....你的回答既不是,也不是一个新来者检查你的“答案”,他仍然不明白该怎么做... [请阅读此链接]( http://stackoverflow.com/help/how-to-answer) – Bonatti

0

我能够重现上免费的Windows 7/IE 11 VM(available here),其严重不来这个错误与默认的PDF处理程序,所以不知道什么是mimetype。

结果,我想出了唯一的解决方法是这样的(对于PDF文件的例子 - 改变应用程序/ PDF格式和PDF需要的话):

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

请注意,这不会不工作在IE浏览器的所有版本的endsWith的填充工具 - 所以这里是你需要的任何地方在您的代码(来自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; 
    }; 
}