当我将文件/ MIME类型添加到基本HTML文件输入中时,我正在尝试获取它。
我的基本HTML:
<form method="post" enctype="multipart/form-data">
<div>
<label for="file">Upload an MKV file:</label>
<input type="file" id="file" name="file" multiple>
</div>
</form>
我的Javascript:
var control = document.getElementById("file");
control.addEventListener("change", function(event) {
var files = control.files;
for (var i = 0; i < files.length; i++) {
console.log("Filename: " + files[i].name);
console.log("Type: " + files[i].type);
}
}, false);
例如,添加MP4时,以下内容将输出到控制台:
Filename: myvideo.mp4
Type: video/mp4
尽管添加MKV文件时,控制台输出的类型为空,如下所示:
Filename: myvideo.mkv
Type:
经过进一步研究,我发现MKV文件的正式模仿是video/x-matroska
。因此,我尝试将accept="video/*"
添加到文件输入中。这样可以将所有视频类型添加到输入的 除 MKV文件中,这很奇怪。
那为什么我的文件输入无法检测到MKV文件的文件类型?
答案 0 :(得分:2)
“ MKV文件的正式模仿是video / x-matroska”
不幸的是,这不是事实。 IANA仍未在其官方MIME类型列表中认可它。
现在,在某些浏览器+操作系统配置中,您实际上可能会拥有它,因为type
检查是由浏览器非常宽松地进行的,通常只检查扩展名和MIME的已知扩展名映射。某些浏览器本身没有这样的列表,因此将使用您的用户可以控制的操作系统。
但是在我的情况下(macOs),除了空字符串外,没有其他浏览器会显示任何内容...
Firefox actually has an open issue about it.
但是,您可以通过在accept
属性中明确设置扩展名来解决该问题:
<input type="file" accept="video/*,.mkv">
答案 1 :(得分:0)