Часто возникает задача проверить MIME-тип файла перед его загрузкой на сервер. Зачем это нужно? Во-первых, это позволяет избежать загрузки нежелательных или некорректных файлов. Во-вторых, это может сэкономить ресурсы сервера, так как некорректные файлы будут отфильтрованы еще до отправки на сервер. Однако, существуют сложности, связанные с тем, что браузеры могут определять тип файла по его расширению, а не по MIME-типу.
Вот пример: предположим, что у нас есть файл JPEG, но его расширение было изменено на .png. Если мы попытаемся получить информацию о MIME-типе файла в браузере с помощью JavaScript, то получим «image/png», что является некорректным.
document.getElementsByTagName('input')[0].files[0];
Полученный результат:
File {webkitRelativePath: "", lastModifiedDate: Tue Oct 16 2012 10:00:00 GMT+0000 (UTC), name: "test.png", type: "image/png", size: 500055…}
Это происходит, потому что браузеры определяют тип файла по его расширению, а не по его MIME-типу.
Нет ли способа определить MIME-тип на клиентской стороне?
На текущий момент нет надежного способа проверить MIME-тип файла с помощью JavaScript на стороне клиента. Даже если в спецификациях W3C и WHATWG указано, что должно быть реализовано «MIME Sniffing», на практике это не всегда работает корректно.
Заключение
Проверка MIME-типа файла до его загрузки на сервер может быть полезной для экономии ресурсов сервера и предотвращения загрузки нежелательных файлов. Однако, на данный момент нет надежного способа сделать это с помощью JavaScript на стороне клиента. Поэтому для проверки MIME-типа файла рекомендуется использовать серверный код.
Добавить комментарий