"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。所有其他浏览器工作正常。
有人可以帮我吗?
答案 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;
};
}