Заголовки MIME, которые вы получаете, выглядят правильными: Что такое правильный тип MIME для docx, pptx и т. Д.?
Однако отправляющее программное обеспечение может работать только с тем файломего пользователь выбрал - и все еще есть много людей, отправляющих файлы с неправильным расширением.Некоторые программы могут справиться с этим, другие не могут.Чтобы увидеть это в действии, измените имя PNG-изображения на JPEG.Я только что сделал на моем Mac, и Preview все еще в состоянии открыть его.Когда я нажимаю ⌘ + I в Finder, он говорит, что это файл JPEG, но при открытии в режиме предварительного просмотра он правильно идентифицируется как файл «Portable Network Graphics».(Ваша ОС может или не может сделать это.)
Но после загрузки файла вы можете однозначно отличаться между файлом DOC и файлом DOCX, даже если автор неправильно определил его расширение.
Файл DOC начинается с заголовка Microsoft OLE, который имеет довольно сложную структуру.Файл DOCX, с другой стороны, представляет собой составной формат файла, содержащий множество небольших файлов XML, сжатых вместе с использованием стандартного сжатия файлов ZIP.Поэтому этот тип файла всегда будет начинаться с двух символов PK
.
Эта проверка совместима с Python 2.7 и 3.x (только для одного требуется decode
):
import sys
if len(sys.argv) == 2:
print ('testing file: '+sys.argv[1])
with open(sys.argv[1], 'rb') as testMe:
startBytes = testMe.read(2).decode('latin1')
print (startBytes)
if startBytes == 'PK':
print ('This is a DOCX document')
else:
print ('This is a DOC document')
Технически он будет уверенно указывать «Это документ DOC» для всего, что не начинается с PK
, и, наоборот, он будет говорить «Это документ DOCX» для любого сжатого файла (или даже простой текстовый файл, который начинается с этих двух символов).Поэтому, если вы продолжите обработку файла на основе этого решения, вы можете обнаружить, что это не документ Microsoft Word.Но, по крайней мере, вы попробуете с правильным декодером.