import os from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.parsers import FileUploadParser from kedong.settings import MEDIA_ROOT import uuid import uuid from datetime import datetime class FileUploadView(APIView): # 上传图片 def post(self, request): path = request.data.get("model", "others") local_path = os.path.join(MEDIA_ROOT, path) os.mkdir(local_path) if not os.path.exists(local_path) else None file_obj = request.data['file'] if file_obj.size > 1024 * 1024 * 10: return Response({"code": 2, "msg": "请上传小于10M图片"}) # if (file_obj.name).split(".")[-1] not in ["jpeg", "jpg", 'png', 'bmp', 'tif','gif', 'flv', 'mp4']: # return Response({"code": 2, "msg": "请上传 jpeg jpg png 图片格式"}) try: stamp = int(datetime.now().timestamp()) unique_id = uuid.uuid4() combined_id = str(stamp) + "-" + str(unique_id) file_name = combined_id + "." + ((file_obj.name).split("."))[-1] with open(f"{local_path}/{file_name}", 'wb') as f: for chunk in file_obj.chunks(): f.write(chunk) return Response({"url": f'/media/{path}/{file_name}', "code": 0, "msg": "success"}) except Exception as e: return Response({"code": 2, "msg": "图片保存失败,请检查或重试"})