43 lines
1.2 KiB
Python
43 lines
1.2 KiB
Python
import structlog
|
|
from rest_framework.decorators import api_view
|
|
from rest_framework.response import Response
|
|
|
|
from vbv_lernwelt.files.serializers import PresignInputSerializer
|
|
from vbv_lernwelt.files.services import FileDirectUploadService
|
|
|
|
logger = structlog.get_logger(__name__)
|
|
|
|
|
|
@api_view(["POST"])
|
|
def presign(request):
|
|
logger.debug(
|
|
"presign request",
|
|
file_type=request.data.get("file_type"),
|
|
file_name=request.data.get("file_name"),
|
|
label="file_upload",
|
|
)
|
|
|
|
if not request.user.is_authenticated:
|
|
return Response(status=401)
|
|
|
|
serializer = PresignInputSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
|
|
service = FileDirectUploadService(request.user)
|
|
|
|
upload_file, pre_signed_data = service.start(
|
|
file_name=serializer.validated_data["file_name"],
|
|
file_type=serializer.validated_data["file_type"],
|
|
)
|
|
|
|
return Response(
|
|
data={
|
|
"pre_sign": pre_signed_data,
|
|
"file_info": {
|
|
"id": upload_file.id,
|
|
"name": upload_file.original_file_name,
|
|
"url": upload_file.url,
|
|
},
|
|
}
|
|
)
|