58 lines
2.2 KiB
Python
58 lines
2.2 KiB
Python
import os
|
|
import json
|
|
import uuid
|
|
|
|
from django.conf import settings
|
|
from django.http import HttpResponse
|
|
from django.utils.translation import ugettext_lazy as _
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.core.files.storage import default_storage
|
|
from django.core.files.base import ContentFile
|
|
|
|
from martor.utils import LazyEncoder
|
|
|
|
|
|
@login_required
|
|
def markdown_uploader(request):
|
|
"""
|
|
Makdown image upload for locale storage
|
|
and represent as json to markdown editor.
|
|
"""
|
|
if request.method == 'POST' and request.is_ajax():
|
|
if 'markdown-image-upload' in request.FILES:
|
|
image = request.FILES['markdown-image-upload']
|
|
image_types = [
|
|
'image/png', 'image/jpg',
|
|
'image/jpeg', 'image/pjpeg', 'image/gif'
|
|
]
|
|
if image.content_type not in image_types:
|
|
data = json.dumps({
|
|
'status': 405,
|
|
'error': _('Bad image format.')
|
|
}, cls=LazyEncoder)
|
|
return HttpResponse(
|
|
data, content_type='application/json', status=405)
|
|
|
|
if image._size > settings.MAX_IMAGE_UPLOAD_SIZE:
|
|
to_MB = settings.MAX_IMAGE_UPLOAD_SIZE / (1024 * 1024)
|
|
data = json.dumps({
|
|
'status': 405,
|
|
'error': _('Maximum image file is %(size) MB.') % {'size': to_MB}
|
|
}, cls=LazyEncoder)
|
|
return HttpResponse(
|
|
data, content_type='application/json', status=405)
|
|
|
|
img_uuid = "{0}-{1}".format(uuid.uuid4().hex[:10], image.name.replace(' ', '-'))
|
|
tmp_file = os.path.join(settings.MARTOR_UPLOAD_PATH, img_uuid)
|
|
def_path = default_storage.save(tmp_file, ContentFile(image.read()))
|
|
img_url = os.path.join(settings.MEDIA_URL, def_path)
|
|
|
|
data = json.dumps({
|
|
'status': 200,
|
|
'link': img_url,
|
|
'name': image.name
|
|
})
|
|
return HttpResponse(data, content_type='application/json')
|
|
return HttpResponse(_('Invalid request!'))
|
|
return HttpResponse(_('Invalid request!'))
|