

@csrf_exempt
def ajax_upload(request, folder_id=None):
    '\n    Receives an upload from the uploader. Receives only one file at a time.\n    '
    mimetype = ('application/json' if request.is_ajax() else 'text/html')
    content_type_key = ('mimetype' if LTE_DJANGO_1_4 else 'content_type')
    response_params = {
        content_type_key: mimetype,
    }
    folder = None
    if folder_id:
        try:
            folder = Folder.objects.get(pk=folder_id)
        except Folder.DoesNotExist:
            return HttpResponse(json.dumps({
                'error': NO_FOLDER_ERROR,
            }), **response_params)
    if (folder and (not folder.has_add_children_permission(request))):
        return HttpResponse(json.dumps({
            'error': NO_PERMISSIONS_FOR_FOLDER,
        }), **response_params)
    try:
        if (len(request.FILES) == 1):
            (upload, filename, is_raw) = handle_request_files_upload(request)
        else:
            (upload, filename, is_raw) = handle_upload(request)
        for filer_class in filer_settings.FILER_FILE_MODELS:
            FileSubClass = load_object(filer_class)
            if FileSubClass.matches_file_type(filename, upload, request):
                FileForm = modelform_factory(model=FileSubClass, fields=('original_filename', 'owner', 'file'))
                break
        uploadform = FileForm({
            'original_filename': filename,
            'owner': request.user.pk,
        }, {
            'file': upload,
        })
        if uploadform.is_valid():
            file_obj = uploadform.save(commit=False)
            file_obj.is_public = filer_settings.FILER_IS_PUBLIC_DEFAULT
            file_obj.folder = folder
            file_obj.save()
            if (not file_obj.icons):
                file_obj.delete()
                return HttpResponse(json.dumps({
                    'error': 'failed to generate icons for file',
                }), status=500, **response_params)
            thumbnail = None
            for size in (['32'] + filer_settings.FILER_ADMIN_ICON_SIZES[1::(- 1)]):
                try:
                    thumbnail = file_obj.icons[size]
                    break
                except KeyError:
                    continue
            json_response = {
                'thumbnail': thumbnail,
                'alt_text': '',
                'label': str(file_obj),
                'file_id': file_obj.pk,
            }
            if (type(file_obj) == Image):
                thumbnail_180_options = {
                    'size': (180, 180),
                    'crop': True,
                    'upscale': True,
                }
                thumbnail_180 = file_obj.file.get_thumbnail(thumbnail_180_options)
                json_response['thumbnail_180'] = thumbnail_180.url
                json_response['original_image'] = file_obj.url
            return HttpResponse(json.dumps(json_response), **response_params)
        else:
            form_errors = '; '.join([('%s: %s' % (field, ', '.join(errors))) for (field, errors) in list(uploadform.errors.items())])
            raise UploadException(("AJAX request not valid: form invalid '%s'" % (form_errors,)))
    except UploadException as e:
        return HttpResponse(json.dumps({
            'error': str(e),
        }), status=500, **response_params)

dataset/ETHPy150Open divio/django-filer/filer/admin/clipboardadmin.py ajax_upload/original