将MKV文件添加到文件输入时,为什么没有返回文件类型?

时间:2019-06-05 05:27:09

标签: javascript html mkv

当我将文件/ 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);

Working Example


例如,添加MP4时,以下内容将输出到控制台:

Filename: myvideo.mp4
Type: video/mp4

尽管添加MKV文件时,控制台输出的类型为空,如下所示:

Filename: myvideo.mkv
Type: 

经过进一步研究,我发现MKV文件的正式模仿是video/x-matroska。因此,我尝试将accept="video/*"添加到文件输入中。这样可以将所有视频类型添加到输入的 MKV文件中,这很奇怪。

那为什么我的文件输入无法检测到MKV文件的文件类型?

2 个答案:

答案 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)