30 lines
997 B
Python
30 lines
997 B
Python
from drf_spectacular.utils import extend_schema
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
from rest_framework.viewsets import GenericViewSet
|
|
|
|
from apps.chat.serializers.presign import PresignResultSerializer, SignContentSerializer
|
|
from apps.chat.services.storage import StorageService
|
|
|
|
|
|
class PresignViewSet(GenericViewSet):
|
|
authentication_classes = []
|
|
permission_classes = []
|
|
serializer_class = SignContentSerializer
|
|
|
|
@extend_schema(
|
|
request=SignContentSerializer,
|
|
responses={201: PresignResultSerializer},
|
|
)
|
|
def create(self, request):
|
|
serializer = self.get_serializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
upload_url, object_key = StorageService().get_upload_url(
|
|
serializer.validated_data["filename"]
|
|
)
|
|
|
|
return Response(
|
|
{"upload_url": upload_url, "object_key": object_key},
|
|
status=status.HTTP_201_CREATED,
|
|
)
|