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