Fichiers des chants servis par X-Sendfile

This commit is contained in:
Claude Paroz 2025-10-19 19:57:42 +02:00
parent c37c52cb5d
commit 75f024feaf
2 changed files with 22 additions and 1 deletions

View file

@ -1,9 +1,12 @@
from datetime import date, timedelta
from django.conf import settings
from django.contrib import messages
from django.contrib.auth.mixins import LoginRequiredMixin, PermissionRequiredMixin
from django.http import HttpResponse
from django.urls import reverse_lazy
from django.views.generic import (
CreateView, DeleteView, ListView, TemplateView, UpdateView
CreateView, DeleteView, ListView, TemplateView, UpdateView, View
)
from .forms import ChantEditForm, MembreEditForm
@ -27,6 +30,22 @@ class ManifestView(TemplateView):
content_type = "application/json"
class MediaServeView(LoginRequiredMixin, View):
subdir = ""
def get(self, request, *args, **kwargs):
if request.get_host() == "localhost:8000":
from django.views.static import serve
return serve(request, f"{self.subdir}/{kwargs['path']}", document_root=settings.MEDIA_ROOT)
filepath = settings.MEDIA_ROOT / self.subdir / kwargs["path"]
return HttpResponse(headers={
"Content-Type": "application/force-download",
"Content-Disposition": f'attachment; filename="{filepath.name}"',
"X-Sendfile": str(filepath).encode("utf-8"),
})
class PresentationView(TemplateView):
template_name="presentation.html"

View file

@ -27,4 +27,6 @@ urlpatterns = [
path("membres/chants/<int:pk>/edit/", views.ChantEditView.as_view(), name="chant-edit"),
path("membres/chants/<int:pk>/delete/", views.ChantDeleteView.as_view(), name="chant-delete"),
path("membres/documents/", views.MediaView.as_view(prive=True), name="docs-membres"),
path("media/chants/<path:path>", views.MediaServeView.as_view(subdir="chants")),
]