forked from CGM_Public/pretix_original
Directly serve cached files through django
This commit is contained in:
@@ -5,12 +5,14 @@ from django.contrib.contenttypes.fields import GenericRelation
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.db.models.signals import post_delete
|
from django.db.models.signals import post_delete
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
from django.utils.crypto import get_random_string
|
||||||
|
|
||||||
from pretix.base.i18n import I18nJSONEncoder
|
from pretix.base.i18n import I18nJSONEncoder
|
||||||
|
|
||||||
|
|
||||||
def cachedfile_name(instance, filename: str) -> str:
|
def cachedfile_name(instance, filename: str) -> str:
|
||||||
return 'cachedfiles/%012d.%s' % (instance.id, filename.split('.')[-1])
|
secret = get_random_string(length=12)
|
||||||
|
return 'cachedfiles/%s.%s.%s' % (instance.id, secret, filename.split('.')[-1])
|
||||||
|
|
||||||
|
|
||||||
class CachedFile(models.Model):
|
class CachedFile(models.Model):
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
from django.http import HttpRequest, HttpResponse
|
import os
|
||||||
|
|
||||||
|
from django.http import FileResponse, HttpRequest, HttpResponse
|
||||||
from django.shortcuts import get_object_or_404, redirect
|
from django.shortcuts import get_object_or_404, redirect
|
||||||
from django.utils.functional import cached_property
|
from django.utils.functional import cached_property
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
@@ -17,6 +19,9 @@ class DownloadView(TemplateView):
|
|||||||
if 'ajax' in request.GET:
|
if 'ajax' in request.GET:
|
||||||
return HttpResponse('1' if self.object.file else '0')
|
return HttpResponse('1' if self.object.file else '0')
|
||||||
elif self.object.file:
|
elif self.object.file:
|
||||||
return redirect(self.object.file.url)
|
resp = FileResponse(self.object.file.file, content_type=self.object.type)
|
||||||
|
_, ext = os.path.splitext(self.object.filename)
|
||||||
|
resp['Content-Disposition'] = 'attachment; filename="{}.{}"'.format(self.object.id, ext)
|
||||||
|
return resp
|
||||||
else:
|
else:
|
||||||
return super().get(request, *args, **kwargs)
|
return super().get(request, *args, **kwargs)
|
||||||
|
|||||||
Reference in New Issue
Block a user