Любой способ угадать тип 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);
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
может быть изменен на стороне клиента, а также не совпадать с реестром на стороне сервера.
о скольких типах файлов вы говорите? Возможно, вы можете просто создать список типов, которые хотите поддерживать.
Я могу представить, что эти списки также доступны в интернете, например
- здесь:http://www.webmaster-toolkit.com/mime-types.shtml
- здесь:http://webdesign.about.com/od/multimedia/a/mime-types-by-file-extension.htm
- здесь: Список всех типов Миметиков на планете, сопоставлено с расширениями файлов?
- здесь:http://hul.harvard.edu/ois/systems/wax/wax-public-help/mimetypes.htm
просто получите расширение файла с помощью ExtractFileExt
и проверьте его agains один из этих списков. В файле нет типа mime, поэтому вам нужно будет использовать либо этот список расширений файлов, либо определить тип, прочитав заголовки файлов, что сложнее и так же ненадежно.