1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- """simditor views."""
- from __future__ import absolute_import
- import os
- from datetime import datetime
- from django.conf import settings
- from django.core.files.storage import default_storage
- from django.http import JsonResponse
- from django.views import generic
- from django.views.decorators.csrf import csrf_exempt
- from utils.qiniucdn import qiniu_file_url, upload
- from . import image_processing, utils
- def get_upload_filename(upload_name):
-
- date_path = datetime.now().strftime('%Y/%m/%d')
-
- upload_path = os.path.join(settings.SIMDITOR_UPLOAD_PATH, date_path)
- if getattr(settings, 'SIMDITOR_UPLOAD_SLUGIFY_FILENAME', True):
- upload_name = utils.slugify_filename(upload_name)
- return default_storage.get_available_name(os.path.join(upload_path, upload_name))
- def upload_handler(request):
- files = request.FILES
- upload_config = settings.SIMDITOR_CONFIGS.get(
- 'upload', {'fileKey': 'upload'})
- filekey = upload_config.get('fileKey', 'upload')
- uploaded_file = files.get(filekey)
- if not uploaded_file:
- retdata = {'file_path': '', 'success': False,
- 'msg': '图片上传失败,无法获取到图片对象!'}
- return JsonResponse(retdata)
- image_size = upload_config.get('image_size')
- if image_size and uploaded_file.size > image_size:
- retdata = {'file_path': '', 'success': False,
- 'msg': '上传失败,已超出图片最大限制!'}
- return JsonResponse(retdata)
- backend = image_processing.get_backend()
- if not getattr(settings, 'SIMDITOR_ALLOW_NONIMAGE_FILES', True):
- try:
- backend.image_verify(uploaded_file)
- except utils.NotAnImageException:
- retdata = {'file_path': '', 'success': False,
- 'msg': '图片格式错误!'}
- return JsonResponse(retdata)
- key = upload(uploaded_file.read())
- if not key:
- retdata = {'file_path': key, 'success': False, 'msg': '上传失败,请重试!'}
- else:
- img_url = qiniu_file_url(key)
- retdata = {'file_path': img_url, 'success': True, 'msg': '上传成功!'}
- return JsonResponse(retdata)
- class ImageUploadView(generic.View):
- """ImageUploadView."""
- http_method_names = ['post']
- def post(self, request, **kwargs):
- """Post."""
- return upload_handler(request)
- UPLOAD = csrf_exempt(ImageUploadView.as_view())
|