code: def ajax_upload(self, request, folder_id=None):
          mimetype = "application/json" if request.is_ajax() else "text/html"
          content_type_key = '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 media_settings.MEDIA_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 = settings.MEDIA_IS_PUBLIC_DEFAULT
                  file_obj.folder = folder
                  file_obj.save()
                  json_response = {
                      'thumbnail': file_obj.icons['32'],
                      'alt_text': '',
                      'label': str(file_obj),
                      'file_id': file_obj.pk,
                  }
                  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)}),
                                  **response_params)