ai_admin/WebAdmin/upload_avatar.py

37 lines
1.3 KiB
Python
Raw Permalink Normal View History

2024-09-20 12:29:09 +08:00
import os
import uuid
from django.conf import settings
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.http import require_http_methods
from .base import logger
@csrf_exempt
@require_http_methods(["POST"])
def upload_avatar(request):
"""
上传图片的接口返回图片URL
"""
try:
if not request.user.is_authenticated:
return JsonResponse({'code': 401, 'message': '用户未登录'}, status=401)
if 'avatar' not in request.FILES:
return JsonResponse({'code': 400, 'message': '没有上传图片'}, status=400)
avatar_file = request.FILES['avatar']
# 保存图片到指定目录
avatar_filename = f"{uuid.uuid4()}.{avatar_file.name.split('.')[-1]}"
avatar_path = os.path.join(settings.MEDIA_ROOT, 'avatars', avatar_filename)
with open(avatar_path, 'wb') as f:
for chunk in avatar_file.chunks():
f.write(chunk)
avatar_url = f"{settings.DOMAIN}{settings.MEDIA_URL}avatars/{avatar_filename}"
return JsonResponse({'code': 200, 'avatar_url': avatar_url})
except Exception as e:
logger.error(f"Error uploading avatar: {str(e)}")
return JsonResponse({"code": 500, "message": str(e)}, status=500)