Как мне найти MIME-тип в Python - PullRequest
1 голос
/ 18 ноября 2010

Я пробую некоторые CGI-скрипты на Python. Если к моему скрипту python приходит запрос, как мне найти mime-тип для filetype?

ОБНОВЛЕНИЕ: добавление дополнительной информации Некоторые изображения на данный момент, adderess / image.jpg. Но если я понимаю, что mime-type является частью заголовков, отправляемых веб-браузерами, верно? Итак, как мне прочитать эти заголовки?

Ответы [ 3 ]

2 голосов
/ 18 ноября 2010

У вас есть два варианта. Если вам повезет, клиент может определить mimetype файла, и он может быть включен в форму сообщения. Обычно это со значением входного элемента, чье имя «filetype» или что-то подобное.

В противном случае вы можете угадать mimetype из расширения файла на сервере. Это в некоторой степени зависит от того, насколько современным является модуль mimetypes. Обратите внимание, что вы можете добавлять типы или переопределять типы в модуле. Затем вы используете функцию «guess_type», которая интерпретирует mimetype из расширения имени файла.

import mimetypes
mimetypes.add_type('video/webm','.webm')

...

    mimetypes.guess_type(filename)

ОБНОВЛЕНИЕ: Если я правильно помню, вы можете получить клиентскую интерпретацию mimetype из заголовка «Content-Type». В большинстве случаев это оказывается «application / octet-stream», который почти бесполезен.

Итак, если вы используете модуль cgi и загружаете файлы с обычной многочастной формой, браузер определит для вас mimetype. Кажется, он справляется с этим достойно и передается параметру form.type. Таким образом, вы можете сделать что-то вроде этого:

import cgi
form = cgi.FieldStorage()
files_types = {};
if form.type == 'multipart/form-data':
    for part in form.keys():
        files_types[form[part].filename] = form[part].type
else:
    files_types[form.filename] = form.type
0 голосов
/ 19 ноября 2010

Предполагается, что вы отправляете файлы с HTML-формой, подобной этой:

<form enctype="multipart/form-data" method="post">
    <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
</form>

Вы можете получить тип файла с этим в скрипте Python CGI:

form = cgi.FieldStorage()
filetype = form['userfile'].type

Учтите, что отправляемый тип файла определяется клиентским веб-браузером. Он не обнаруживается библиотекой Python CGI или сервером HTTP. Вы можете использовать модуль Python mimetypes , чтобы угадывать MIME-типы по расширениям файлов (например: mimetypes.guess_type(form['userfile'].name)). Вы также можете использовать команду UNIX file для максимальной надежности, хотя это обычно слишком дорого.

0 голосов
/ 18 ноября 2010

Вы можете получить некоторый пробег от python-magic

...