From: Guillaume Pellerin Date: Wed, 24 Apr 2024 08:24:41 +0000 (+0200) Subject: use url for media serving X-Git-Tag: 2.10.0~15 X-Git-Url: https://git.parisson.com/?a=commitdiff_plain;h=0acde169dec15c068c1bdc24d61b7a5f96ca82da;p=teleforma.git use url for media serving --- diff --git a/app/settings.py b/app/settings.py index a635051b..078ffafa 100644 --- a/app/settings.py +++ b/app/settings.py @@ -269,7 +269,7 @@ TELEFORMA_EXAM_MAX_SESSIONS = 99 TELEFORMA_EXAM_SCRIPT_MAX_SIZE = 31457280 TELEFORMA_EXAM_SCRIPT_SERVICE_URL = '/webviewer/teleforma.html' TELEFORMA_PRIVATE_DOCUMENTS_MODE = False -TELEFORMA_PRIVATE_MEDIA_USE_S3 = False +TELEFORMA_PRIVATE_MEDIA_USE_S3 = True AWS_ACCESS_KEY_ID="" AWS_SECRET_ACCESS_KEY="" diff --git a/teleforma/utils.py b/teleforma/utils.py index a435d751..6a21d79e 100644 --- a/teleforma/utils.py +++ b/teleforma/utils.py @@ -1,8 +1,5 @@ import mimetypes -def guess_mimetypes(path): - try: - path = path.decode() - except (UnicodeDecodeError, AttributeError): - pass - return mimetypes.guess_type(path)[0] \ No newline at end of file +def guess_mimetypes(url): + url = url.split("?")[0] + return mimetypes.guess_type(url)[0] \ No newline at end of file diff --git a/teleforma/views/core.py b/teleforma/views/core.py index 3c697c78..54daa17a 100644 --- a/teleforma/views/core.py +++ b/teleforma/views/core.py @@ -280,29 +280,30 @@ def render_to_pdf(request, template, context, filename=None, encoding='utf-8', return HttpResponse('Errors rendering pdf:
%s
' % escape(content)) -def serve_media(media_path, content_type="", buffering=True, streaming=False): +def serve_media(file, content_type="", buffering=True, streaming=False): if not content_type: - content_type = guess_mimetypes(media_path) + content_type = guess_mimetypes(file.url) if not settings.DEBUG: - return nginx_media_accel(media_path, content_type=content_type, + return nginx_file_accel(file.url, content_type=content_type, buffering=buffering, streaming=streaming) else: response = StreamingHttpResponse( - stream_from_file(media_path), content_type=content_type) - filename = os.path.basename(media_path) + stream_from_file(file.path), content_type=content_type) + filename = os.path.basename(file.path) if not streaming: response['Content-Disposition'] = 'attachment; ' + \ 'filename=' + filename return response -def nginx_media_accel(media_path, content_type="", buffering=True, streaming=False): +def nginx_media_accel(url, content_type="", buffering=True, streaming=False): """Send a protected media file through nginx with X-Accel-Redirect""" response = HttpResponse() - url = settings.MEDIA_URL + os.path.relpath(media_path, settings.MEDIA_ROOT) - filename = os.path.basename(media_path) + # url = settings.MEDIA_URL + os.path.relpath(file, settings.MEDIA_ROOT) + filename = url.split("/")[-1].split("?")[0] + if not streaming: response['Content-Disposition'] = "attachment; filename=%s" % ( filename) @@ -817,10 +818,10 @@ class DocumentView(CourseAccessMixin, DetailView): document = Document.objects.get(pk=pk) if get_access(document, courses): if settings.TELEFORMA_PRIVATE_DOCUMENTS_MODE: - path = document.private_file(request.user).path + file = document.private_file(request.user) else: - path = document.file.path - return serve_media(path, streaming=False) + file = document.file + return serve_media(file, streaming=False) else: return redirect('teleforma-home') @@ -829,10 +830,10 @@ class DocumentView(CourseAccessMixin, DetailView): document = Document.objects.get(pk=pk) if get_access(document, courses): if settings.TELEFORMA_PRIVATE_DOCUMENTS_MODE: - path = document.private_file(request.user).path + file = document.private_file(request.user) else: - path = document.file.path - return serve_media(path, streaming=True) + file = document.file + return serve_media(file, streaming=True) else: return redirect('teleforma-home')