@zkrvndm
Боты, парсеры, расширения

Как определить MIME-тип файла по содержимому?

Допустим у нас есть Blob или File без явно прописанного типа, т. е. свойство type пустое.
Существует ли какой-нибудь простой способ определить MIME-тип файла?
Желательно без возни со сравнением магических чисел вручную!

Предыстория данного вопроса: Как распаковать zip-архив?
Тестовый стенд для экспериментов: https://nadim.work/zip/

Что я уже пробовал делать

У меня была такая идея, попробовать записать файл в виртуальную файловую систему и прочитать его обратно, по моим предположениям операционная система должна автоматически присвоить правильный MIME-тип, но к сожалению это не сработало и MIME-тип так и не присвоился:
window.webkitRequestFileSystem(window.TEMPORARY, 10*1024*1024, function(fs) {
    
    fs.root.getFile(file.name, { create: true }, function (fileEntry) {

        fileEntry.createWriter(function (fileWriter) {

            fileWriter.onwriteend = function(e) {

                console.log('Успех!');

                fs.root.getFile(file.name, {}, function (fileEntry) {

                    fileEntry.file(function (new_file) {
                        console.log('Файл успешно записан и прочитан обратно:');
                        console.dir(new_file);
                    });

                });

            };

            fileWriter.onerror = function(e) {
                console.log('Ошибка:');
                console.dir(e);
            };

            fileWriter.write(file);

        }, function(err) {
            console.log('Ошибка:');
            console.dir(err);
        });

    }, function(err) {
        console.log('Ошибка:');
        console.dir(err);
    });

}, function(err) {
    console.log('Ошибка:');
    console.dir(err)
});

  • Вопрос задан
  • 66 просмотров
Пригласить эксперта
Ответы на вопрос 1
gscraft
@gscraft
Программист, философ
Хм, определить MIME можно двумя способами: по расширению файла, если оно указано корректно, и по его содержимому. Если с расширением файла все просто, то файл придется читать, пытаясь сверить первые байты с имеющейся базой сигнатур форматов. Наверняка есть готовые библиотеки.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы