37 lines
1.3 KiB
Python
Executable File
37 lines
1.3 KiB
Python
Executable File
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)
|