IE использует GetClassFileOrMime
и FindMimeFromData
API для обнаружения mime-типа данных / файлов (UrlMon
единица в Delphi).
Обнаружение MIME-типа в Internet Explorer
CLSID, возвращенный из GetClassFileOrMime
, может находиться в реестре в HKEY_CLASSES_ROOT\CLSID\<clsid>\MimeTypes
.(также FileExtensions
, FriendlyName
).
Реестр также содержит базу данных MIME в: HKEY_CLASSES_ROOT\MIME\Database\Content Type
.
Но так как список известных типов MIME относительно небольшой, вы можете хранить его как ресурс XML (или любой другой) и просто извлекать его оттуда.Это будет поддерживать как Windows, так и OSX.
Для операции загрузки файлов вы всегда можете просто использовать application/octet-stream
.
Indy имеет класс TIdMimeTable
(IdGlobal
), и он использует фиксированный список плюс проверка реестра HKEY_CLASSES_ROOT
(см FillMimeTable
).Если совпадение не найдено, application/octet-stream
используется.
Возможно, вы захотите проверить файл content на стороне сервера после загрузки файла, и не полагаться на заголовки, поскольку ContentType
может быть подделан на стороне клиента, а также не совпадает с реестром на стороне сервера.