【问题标题】:Why is no file type returned when adding an MKV file to a file input?为什么将 MKV 文件添加到文件输入时没有返回文件类型?
【发布时间】:2019-06-05 14:19:29
【问题描述】:

我试图在将文件添加到基本 HTML 文件输入时获取文件的文件/mime 类型。

我的基本 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文件的官方mimetype是video/x-matroska。所以我尝试将accept="video/*" 添加到文件输入中。这允许将所有视频类型添加到输入除了 MKV 文件,这很奇怪。

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

【问题讨论】:

  • 一个原因可能是 - 浏览器本身不支持它

标签: javascript html mkv


【解决方案1】:

“MKV 文件的官方 mimetype 是 video/x-matroska”

不幸的是,这不是真的。 IANA 仍未在其官方 MIME 类型列表中认可它。

现在,在某些浏览器 + 操作系统配置中,您实际上可能会拥有它,因为浏览器对 type 的检查非常宽松,通常只检查扩展名和 MIME 已知扩展名的映射。有些浏览器本身没有这样的列表,因此将使用您的用户可以控制的操作系统。

但在我的情况下(macOs),除了空字符串之外,似乎没有浏览器显示任何其他内容......

Firefox actually has an open issue about it.

但是,您可以通过在 accept 属性中明确设置扩展名来解决该问题:

&lt;input type="file" accept="video/*,.mkv"&gt;

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 2016-02-22
    • 1970-01-01
    • 2018-12-03
    • 2013-12-17
    • 2018-12-15
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多