59 lines
2.4 KiB
Python
59 lines
2.4 KiB
Python
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 |