|
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
|
|
|
|