У вас есть два варианта. Если вам повезет, клиент может определить 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