1
|
|
|
# coding: utf8 |
2
|
|
|
import magic |
3
|
|
|
|
4
|
|
|
|
5
|
|
|
def get_file_extension(file_header): |
6
|
|
|
mime_dict = { |
7
|
|
|
'application/epub+zip': 'epub', |
8
|
|
|
'application/zip': 'zip', |
9
|
|
|
'application/x-tar': 'tar', |
10
|
|
|
'application/x-rar-compressed': 'rar', |
11
|
|
|
'application/gzip': 'gz', |
12
|
|
|
'application/x-bzip2': 'bz2', |
13
|
|
|
'application/x-7z-compressed': '7z', |
14
|
|
|
'application/x-xz': 'xz', |
15
|
|
|
'application/pdf': 'pdf', |
16
|
|
|
'application/x-msdownload': 'exe', |
17
|
|
|
'application/x-shockwave-flash': 'swf', |
18
|
|
|
'application/rtf': 'rtf', |
19
|
|
|
'application/octet-stream': 'eot', |
20
|
|
|
'application/postscript': 'ps', |
21
|
|
|
'application/x-sqlite3': 'sqlite', |
22
|
|
|
'application/x-nintendo-nes-rom': 'nes', |
23
|
|
|
'application/x-google-chrome-extension': 'crx', |
24
|
|
|
'application/vnd.ms-cab-compressed': 'cab', |
25
|
|
|
'application/x-deb': 'deb', |
26
|
|
|
'application/x-unix-archive': 'ar', |
27
|
|
|
'application/x-compress': 'Z', |
28
|
|
|
'application/x-lzip': 'lz', |
29
|
|
|
} |
30
|
|
|
mime_type = magic.from_buffer( |
31
|
|
|
file_header, |
32
|
|
|
mime=True |
33
|
|
|
) |
34
|
|
|
try: |
35
|
|
|
if mime_dict[mime_type] == 'gz': |
36
|
|
|
magic_tools = magic.Magic(mime=True, uncompress=True) |
37
|
|
|
mime_type_in_gz = magic_tools.from_buffer(file_header) |
38
|
|
|
file_extension = '%s.%s' % ( |
39
|
|
|
mime_dict[mime_type_in_gz], mime_dict[mime_type] |
40
|
|
|
) |
41
|
|
|
else: |
42
|
|
|
file_extension = mime_dict[mime_type] |
43
|
|
|
except KeyError: |
44
|
|
|
file_extension = None |
45
|
|
|
return {'file_extension': file_extension, 'mime_type': mime_type} |
46
|
|
|
|