113 lines
4.3 KiB
Python
113 lines
4.3 KiB
Python
import os
|
|
|
|
from django.conf import settings
|
|
|
|
try:
|
|
import magic
|
|
USE_PYTHON_MAGIC = True
|
|
except:
|
|
import mimetypes
|
|
mimetypes.init()
|
|
USE_PYTHON_MAGIC = False
|
|
|
|
|
|
MIMETYPE_ICONS_DIRECTORY_NAME = os.path.join('images', 'mimetypes')
|
|
|
|
UNKNWON_TYPE_FILE_NAME = 'unknown.png'
|
|
ERROR_FILE_NAME = 'error.png'
|
|
|
|
mimetype_icons = {
|
|
'application/pdf': 'file_extension_pdf.png',
|
|
'application/zip': 'file_extension_zip.png',
|
|
'application/ogg': 'file_extension_ogg.png',
|
|
'application/postscript': 'file_extension_ps.png',
|
|
'application/x-gzip': 'file_extension_gz.png',
|
|
'application/x-rar-compressed': 'file_extension_rar.png',
|
|
'application/x-troff-msvideo': 'file_extension_avi.png',
|
|
'application/acad': 'file_extension_dwg.png',
|
|
'application/octet-stream': 'file_extension_exe.png',
|
|
'application/vnd.oasis.opendocument.text': 'ODF_textdocument_32x32.png',
|
|
'application/vnd.oasis.opendocument.spreadsheet': 'ODF_spreadsheet_32x32.png',
|
|
'application/vnd.oasis.opendocument.presentation': 'ODF_presentation_32x32.png',
|
|
'application/vnd.oasis.opendocument.graphics': 'ODF_drawing_32x32.png',
|
|
'application/vnd.ms-excel': 'file_extension_xls.png',
|
|
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'file_extension_xls.png',
|
|
'application/msword': 'file_extension_doc.png',
|
|
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'file_extension_doc.png',
|
|
'application/mspowerpoint': 'file_extension_pps.png',
|
|
'application/vnd.ms-powerpoint': 'file_extension_pps.png',
|
|
'application/wav': 'file_extension_wav.png',
|
|
'application/x-wav': 'file_extension_wav.png',
|
|
'application/vnd.oasis.opendocument.text': 'ODF_textdocument_32x32.png',
|
|
|
|
'image/jpeg': 'file_extension_jpeg.png',
|
|
'image/png': 'file_extension_png.png',
|
|
'image/x-png': 'file_extension_png.png',
|
|
'image/tiff': 'file_extension_tif.png',
|
|
'image/x-tiff': 'file_extension_tif.png',
|
|
'image/bmp': 'file_extension_bmp.png',
|
|
'image/gif': 'file_extension_gif.png',
|
|
'image/vnd.dwg': 'file_extension_dwg.png',
|
|
'image/x-dwg': 'file_extension_dwg.png',
|
|
|
|
'audio/mpeg': 'file_extension_mp3.png',
|
|
'audio/mid': 'file_extension_mid.png',
|
|
'audio/x-wav': 'file_extension_wav.png',
|
|
'audio/vnd.wav': 'file_extension_wav.png',
|
|
'audio/x-pn-realaudio': 'file_extension_ram.png',
|
|
'audio/mp4': 'file_extension_mp4.png',
|
|
'audio/x-ms-wma': 'file_extension_wma.png',
|
|
|
|
'video/avi': 'file_extension_avi.png',
|
|
'video/mpeg': 'file_extension_mpeg.png',
|
|
'video/quicktime': 'file_extension_mov.png',
|
|
'video/x-ms-asf': 'file_extension_asf.png',
|
|
'video/x-ms-wmv': 'file_extension_wmv.png',
|
|
|
|
'text/html': 'file_extension_html.png',
|
|
'text/plain': 'file_extension_txt.png',
|
|
}
|
|
|
|
|
|
def get_icon_file_path(mimetype):
|
|
file_name = mimetype_icons.get(mimetype, UNKNWON_TYPE_FILE_NAME)
|
|
if settings.DEVELOPMENT:
|
|
return os.path.join(settings.PROJECT_ROOT, 'apps', 'mimetype', 'static', MIMETYPE_ICONS_DIRECTORY_NAME, file_name)
|
|
else:
|
|
return os.path.join(settings.STATIC_ROOT, MIMETYPE_ICONS_DIRECTORY_NAME, file_name)
|
|
|
|
|
|
def get_error_icon_file_path():
|
|
if settings.DEVELOPMENT:
|
|
return os.path.join(settings.PROJECT_ROOT, 'apps', 'mimetype', 'static', MIMETYPE_ICONS_DIRECTORY_NAME, ERROR_FILE_NAME)
|
|
else:
|
|
return os.path.join(settings.STATIC_ROOT, MIMETYPE_ICONS_DIRECTORY_NAME, ERROR_FILE_NAME)
|
|
|
|
|
|
def get_error_icon_url():
|
|
return os.path.join(MIMETYPE_ICONS_DIRECTORY_NAME, ERROR_FILE_NAME)
|
|
|
|
|
|
def get_mimetype(file_description, filepath, mimetype_only=False):
|
|
"""
|
|
Determine a file's mimetype by calling the system's libmagic
|
|
library via python-magic or fallback to use python's mimetypes
|
|
library
|
|
"""
|
|
file_mimetype = None
|
|
file_mime_encoding = None
|
|
if USE_PYTHON_MAGIC:
|
|
mime = magic.Magic(mime=True)
|
|
file_mimetype = mime.from_buffer(file_description.read())
|
|
if not mimetype_only:
|
|
file_description.seek(0)
|
|
mime_encoding = magic.Magic(mime_encoding=True)
|
|
file_mime_encoding = mime_encoding.from_buffer(file_description.read())
|
|
else:
|
|
path, filename = os.path.split(filepath)
|
|
file_mimetype, file_mime_encoding = mimetypes.guess_type(filename)
|
|
|
|
file_description.close()
|
|
|
|
return file_mimetype, file_mime_encoding
|