2022-04-04 14:38:50 +02:00
|
|
|
import os
|
|
|
|
|
2023-12-30 18:59:15 +01:00
|
|
|
from django.http import HttpResponse
|
2022-04-04 14:38:50 +02:00
|
|
|
from django.shortcuts import get_object_or_404
|
2022-04-01 17:29:11 +02:00
|
|
|
from rest_framework import viewsets
|
2022-04-04 14:38:50 +02:00
|
|
|
from rest_framework.decorators import action
|
2022-04-01 17:29:11 +02:00
|
|
|
from rest_framework.serializers import IntegerField
|
2022-04-04 14:38:50 +02:00
|
|
|
|
|
|
|
from ..models import File
|
|
|
|
from ..serializers import FileSerializer
|
|
|
|
|
|
|
|
|
|
|
|
class FileViewSet(viewsets.ModelViewSet):
|
|
|
|
queryset = File.objects.all()
|
|
|
|
serializer_class = FileSerializer
|
|
|
|
model_permission_name = "file"
|
|
|
|
|
|
|
|
@action(detail=True, methods=["GET"])
|
2022-06-22 13:27:10 +02:00
|
|
|
def download(self, request, pk=None): # pylint: disable=invalid-name
|
2022-04-01 17:29:11 +02:00
|
|
|
pk = IntegerField().to_internal_value(data=pk)
|
2022-04-04 14:38:50 +02:00
|
|
|
|
2022-04-01 17:29:11 +02:00
|
|
|
file = get_object_or_404(File, pk=pk)
|
2023-12-30 18:59:15 +01:00
|
|
|
|
|
|
|
response = HttpResponse()
|
|
|
|
response["Content-Type"] = file.mime
|
|
|
|
response["X-Accel-Redirect"] = os.path.join("/api/_media", file.filepath)
|
|
|
|
return response
|