]> git.parisson.com Git - teleforma.git/commitdiff
use url for media serving
authorGuillaume Pellerin <guillaume.pellerin@free.fr>
Wed, 24 Apr 2024 08:24:41 +0000 (10:24 +0200)
committerGuillaume Pellerin <guillaume.pellerin@free.fr>
Wed, 24 Apr 2024 08:24:41 +0000 (10:24 +0200)
app/settings.py
teleforma/utils.py
teleforma/views/core.py

index a635051b873f6964ac35a886e87845b568f712e1..078ffafa9f7ba433d7b2575d96585c35b88be1af 100644 (file)
@@ -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=""
index a435d751e1da610c91d1ea670d8cd645b27b9a44..6a21d79e630d12d80a89373f2623f65d490decde 100644 (file)
@@ -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
index 3c697c78d9a5b6e3d2299b44d6b8a0fc63903dfb..54daa17ab876e25b10a43a1674fdc07178644197 100644 (file)
@@ -280,29 +280,30 @@ def render_to_pdf(request, template, context, filename=None, encoding='utf-8',
     return HttpResponse('Errors rendering pdf:<pre>%s</pre>' % 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')