This commit is contained in:
@@ -10,6 +10,7 @@ from .serializers import (
|
||||
ProjectSerializer, ProjectFileSerializer,
|
||||
ScoreSerializer, CommentSerializer, ScoreDimensionSerializer
|
||||
)
|
||||
import uuid
|
||||
|
||||
from rest_framework.pagination import PageNumberPagination
|
||||
|
||||
@@ -200,13 +201,26 @@ class ProjectFileViewSet(viewsets.ModelViewSet):
|
||||
return ProjectFile.objects.all()
|
||||
|
||||
def perform_create(self, serializer):
|
||||
# 简单权限控制:只有项目拥有者可以上传
|
||||
project = serializer.validated_data['project']
|
||||
user = get_current_wechat_user(self.request)
|
||||
|
||||
if not user or project.contestant.user != user:
|
||||
raise serializers.ValidationError("无权上传文件")
|
||||
|
||||
|
||||
file_obj = serializer.validated_data.get('file')
|
||||
if file_obj:
|
||||
try:
|
||||
from ai_services.services import AliyunTingwuService
|
||||
service = AliyunTingwuService()
|
||||
if service.bucket:
|
||||
ext = file_obj.name.split('.')[-1] if '.' in file_obj.name else ''
|
||||
file_name = f"competitions/projects/{project.id}/{uuid.uuid4()}.{ext}"
|
||||
oss_url = service.upload_to_oss(file_obj, file_name, day=30)
|
||||
serializer.save(file_url=oss_url, file=None)
|
||||
return
|
||||
except Exception as e:
|
||||
print(f"OSS upload failed, using local storage: {e}")
|
||||
|
||||
serializer.save()
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user