Определение типа MIME загруженных файлов YML и XML - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь проанализировать файл, который был загружен через приложение laravel nova. Я только хочу, чтобы файлы YML или XML проходили и анализировались.

Но чтобы иметь возможность различать загруженные файлы, я хочу проверить тип MIME, чтобы я мог вызвать правильный анализатор для XML или YML.

Однако при наведении указателя мыши на загруженный файл (симфонию) в случае XML он говорит, что это mimetype "text / xml". Для YML это MIME-тип "application / octet-stream".

Оба этих файла будут возвращать MIME-тип "text / plain" при проверке ->getMimeType();

$mimeType = $file->getMimeType();
$finfo = new \finfo(FILEINFO_MIME_TYPE);
$test = $finfo->file($path);

И $mimeType, и $test возвращают "text / plain".

Есть ли другой способ определить тип MIME-файлов XML / YML? Я ожидаю MIME-тип вдоль строк «text / xml», «application / xml», «text / YML» или «application / yml»

1 Ответ

0 голосов
/ 22 октября 2019

Ваша главная проблема в том, что YAML не имеет MIME-типа . Даже если это так, обнаружение типа MIME обычно выполняется с использованием так называемого магического числа . Поскольку для YAML необязательно иметь какой-либо идентификатор , было бы сложно использовать такой тип обнаружения, и вы, вероятно, получили бы ненадежные результаты.

Использование finfoкласс вы сможете определить, является ли файл XML. Поэтому лучше всего проверить файл, используя finfo::file(), и, если он возвращается как текстовый / простой текст, попробуйте использовать синтаксический анализатор Yaml и посмотрите, работает ли он.

$finfo = new \finfo(FILEINFO_MIME_TYPE);
$test = $finfo->file($path);
if ($test === "text/xml") {
    // parse as XML
} else {
    // parse as YAML
}
...