Почему при добавлении файла MKV к входному файлу тип файла не возвращается? - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь получить файл / 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: 

После дальнейших исследований я обнаружил, что официальным mimetype файла MKV является video/x-matroska. Поэтому я попытался добавить accept="video/*" для ввода файла. Это позволяет добавлять все типы видео во входные данные , кроме MKV-файлов, что очень странно.

Так почему мой входной файл не может определить тип файла MKV?

Ответы [ 2 ]

2 голосов
/ 05 июня 2019

"Официальным миметипом файла MKV является video / x-matroska"

К сожалению, это не так. IANA до сих пор не одобрил его в своем списке официальных типов MIME.

Теперь, возможно, что в некоторых браузерах + конфигурация ОС у вас действительно есть, потому что проверка type выполняется довольно снисходительно браузерами, обычно проверяя только расширение и карту известных расширений MIME. Некоторые браузеры сами по себе не имеют такого списка, поэтому используют ОС, которую может контролировать ваш пользователь.

Но в моем случае (macO) ни один браузер не показывает ничего, кроме пустой строки ...

На самом деле у Firefox есть открытая проблема.

Однако вы можете обойти эту проблему, явно указав расширение в атрибуте accept:

<input type="file" accept="video/*,.mkv">
0 голосов
/ 05 июня 2019

Пожалуйста, обратитесь к следующему, чтобы получить поддерживаемые форматы:

  1. https://www.w3schools.com/html/html_media.asp

  2. https://www.w3schools.com/html/html5_video.asp

...