Любой способ угадать тип mime на Delphi XE2?

мне нужно угадать тип mime с целью заполнения заголовка "Content-Type" для некоторых загрузок файлов.

Я не могу найти решение для этого.

Я хочу назвать что-то вроде: GetMimeType('C:File.jpg') и вернуться image/jpg.

лучше всего, если это multiplataform (для win/osx), но будет достаточно, если только для windows.

4 ответов


Internet Direct (Indy) содержит класс для этого:

класс TIdThreadSafeMimeTable

в блоке IdCustomHTTPServer

пример кода в приложении сервера HTTP:

Response.ContentType :=
  Response.HTTPServer.MIMETable.GetFileMIMEType(FileName);

попробуйте использовать FindMimeFromData


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.

но так как список известный МИМ типы относительно мало, вы можете держать это как XML-ресурс (или что-то еще) и просто извлекать его оттуда. Это будет supprt как Windows, так и OSX.


для операции загрузки файлов вы можете просто всегда использовать application/octet-stream.
Инди TIdMimeTable класса (IdGlobal) и он использует фиксированный список плюс проверка реестра HKEY_CLASSES_ROOT (см. FillMimeTable). Если совпадение не найдено это.
Вероятно, вы захотите проверить файл контент at сторона сервера после загрузки файла и не полагаться на заголовки, потому что ContentType может быть изменен на стороне клиента, а также не совпадать с реестром на стороне сервера.


о скольких типах файлов вы говорите? Возможно, вы можете просто создать список типов, которые хотите поддерживать.

Я могу представить, что эти списки также доступны в интернете, например

просто получите расширение файла с помощью ExtractFileExt и проверьте его agains один из этих списков. В файле нет типа mime, поэтому вам нужно будет использовать либо этот список расширений файлов, либо определить тип, прочитав заголовки файлов, что сложнее и так же ненадежно.