from rest_framework.response import Response from rest_framework.views import APIView from rest_framework.parsers import MultiPartParser from rest_framework.permissions import IsAuthenticated from PIL import Image from django.conf import settings from datetime import datetime import os import uuid class UploadFileView(APIView): permission_classes = [IsAuthenticated] parser_classes = (MultiPartParser,) def post(self, request, *args, **kwargs): fileobj = request.FILES['file'] file_name = fileobj.name.encode('utf-8').decode('utf-8') file_name_new = str(uuid.uuid1()) + '.' + file_name.split('.')[-1] subfolder = os.path.join('media', datetime.now().strftime("%Y%m%d")) if not os.path.exists(subfolder): os.mkdir(subfolder) file_path = os.path.join(subfolder, file_name_new) file_path = file_path.replace('\\', '/') with open(file_path, 'wb') as f: for chunk in fileobj.chunks(): f.write(chunk) resdata = {"name": file_name, "path": '/' + file_path} return Response(resdata) # def uploadfile(fileObj ,file_type='pic'): # """ 一个公用的上传文件的处理 """ # resp = '' # if fileObj: # filename = fileObj.name.decode('utf-8', 'ignore') # fileExt = filename.split('.')[1] # file_name = str(uuid.uuid1()) # subfolder = time.strftime("%Y%m") # if not os.path.exists(settings.MEDIA_ROOT[0] + subfolder): # os.makedirs(settings.MEDIA_ROOT[0] + subfolder) # path = str(subfolder + '/' + file_name + '.' + fileExt) # if fileExt.lower() in ('jpg', 'jpeg', 'bmp', 'gif', 'png', "rar", "doc", "docx", "zip", "pdf", "txt", "swf", "wmv"): # phisypath = settings.MEDIA_ROOT[0] + path # destination = open(phisypath, 'wb+') # for chunk in fileObj.chunks(): # destination.write(chunk) # destination.close() # if file_type == 'pic': # if fileExt.lower() in ('jpg', 'jpeg', 'bmp', 'gif', 'png'): # im = Image.open(phisypath) # im.thumbnail((720, 720)) # im.save(phisypath) # real_url = '/static/upload/' + subfolder + '/' + file_name + '.' + fileExt # resp = "{'original':'%s','url':'%s','title':'%s','state':'%s'}" % ( # filename, real_url, 'source_file_tile', 'SUCCESS') # return resp