Если вы хотите узнать тип mime файла на основе его расширения, вы можете использовать недокументированную функцию inets httpd_conf:load_mime_types/1
. Это вместе с файлом mime.types
(есть один в одном из примеров httpd inets в OTP) даст вам список расширений файлов и связанных с ними типов mime по умолчанию. Следующий код даст вам стандартный тип MIME для данного имени файла в зависимости от его расширения:
mime_type(FileName) ->
"." ++ Extension = filename:extension(FileName),
MimeTypes = mime_types(),
proplists:get_value(Extension, MimeTypes).
mime_types() ->
MimeTypesFile = filename:join(code:lib_dir(inets),
"examples/server_root/conf/mime.types"),
{ok, MimeTypes} = httpd_conf:load_mime_types(MimeTypesFile),
MimeTypes.
Теперь вы можете использовать mime_type/1
в имени файла (например, example.pdf
), и он вернет вам тип mime по умолчанию, если он известен (в данном случае "application/pdf"
), или undefined
в противном случае.
Если вы собираетесь выполнять эту операцию несколько раз, было бы неплохо кэшировать результат httpd_conf:load_mime_types/1
, как это делает сервер inets
httpd
, чтобы избежать чтения и анализа файла типов MIME. все время.