Я знаю, что mp3 может быть одним из следующих типов контента
Только audio/mpeg
допустимо. Остальные фальшивые и вообще нигде не будут работать.
Каким будет тип содержимого для zip-файла?
application/zip
.
Где я могу найти эту информацию для других типов контента?
Правильный список всех зарегистрированных типов носителей: в IANA . Конечно, есть еще много типов, которые не были зарегистрированы, в основном те, с префиксом x
.
Если вы хотите на лету выяснить, что ваша машина думает, что конкретное расширение использует серверный скрипт, вы можете найти это в специфичном для ОС месте. В Windows информация о расширении / типе файла хранится в реестре. На настольном Linux он находится в /usr/share/mime
. На веб-сервере Apache вы можете повторно использовать таблицу mime.types
Apache.
для определенного формата / расширения файла?
Расширения файлов не соответствуют стандартам и не являются надежным способом проверки типа ресурса в Интернете, включая загрузку файла. Сопоставления между расширением файла и типом носителя - это проблема, связанная с ОС / установкой, поэтому вы не можете знать, какой тип носителя относится к расширению файла на другом компьютере. Кроме того, некоторые операционные системы даже не используют расширения файлов для определения типа (или используют их только как запасной вариант).
Даже просмотр Content-Type
, поставляемого с загрузкой файла, малопригоден, поскольку он часто бывает неправильным из-за неправильной настройки на стороне клиента. Я предполагаю, что именно поэтому поддельные типы, такие как application/mp3
, попали в список выше, потому что какое-то время один браузер где-то на плохо настроенном компьютере отправлял неправильный тип. Но браузеры всегда могут отправить любой старый неправильный тип ... вы также можете получить text/plain
MP3.
Если вам нужно разрешить пользователю устанавливать определенный тип контента для загруженного ресурса, вам придется позволить ему выбрать его вручную. Конечно, вы можете использовать небольшой взлом скриптов, чтобы сделать полезные предположения, такие как «если он заканчивается на .jpeg, это вероятно a JPEG» и сделать этот выбор автоматически. Но в общем случае не совсем верно угадать тип из расширения, представленного пользователем.