def _ajax_upload(self, request, *args, **kwargs): if request.method == "POST": upload = request.FILES.get('qqfile', None) if not upload: return HttpResponseBadRequest("AJAX request not valid") filename = upload.name backend = self.get_backend() # custom filename handler filename = (backend.update_filename(request, filename, *args, **kwargs) or filename) # save the file backend.setup(request, filename, *args, **kwargs) success = backend.upload(upload, filename, False, *args, **kwargs) # callback extra_context = backend.upload_complete(request, filename, uuid=request.POST['qquuid'], *args, **kwargs) if success is True: file_uploaded.send(sender=self.__class__, backend=backend, request=request, extra_context=extra_context) # let Ajax Upload know whether we saved it or not ret_json = {'success': success, 'filename': filename} if extra_context is not None: ret_json.update(extra_context) # although "application/json" is the correct content type, IE throws a fit return HttpResponse(json.dumps(ret_json, cls=DjangoJSONEncoder), content_type='text/html; charset=utf-8') else: response = HttpResponseNotAllowed(['POST']) response.write("ERROR: Only POST allowed") return response
def _ajax_upload(self, request, *args, **kwargs): if request.method == "POST": if request.is_ajax(): # the file is stored raw in the request upload = request is_raw = True # AJAX Upload will pass the filename in the querystring if it # is the "advanced" ajax upload try: if 'qqfile' in request.GET: filename = request.GET['qqfile'] elif 'qqfilename' in request.GET: filename = request.GET['qqfilename'] else: filename = request.POST['qqfilename'] except KeyError: return HttpResponseBadRequest("AJAX request not valid") # not an ajax upload, so it was the "basic" iframe version with # submission via form else: is_raw = False if len(request.FILES) == 1: # FILES is a dictionary in Django but Ajax Upload gives # the uploaded file an ID based on a random number, so it # cannot be guessed here in the code. Rather than editing # Ajax Upload to pass the ID in the querystring, observe # that each upload is a separate request, so FILES should # only have one entry. Thus, we can just grab the first # (and only) value in the dict. upload = request.FILES.values()[0] else: raise Http404("Bad Upload") filename = upload.name backend = self.get_backend() # custom filename handler filename = (backend.update_filename(request, filename, *args, **kwargs) or filename) # save the file backend.setup(filename, *args, **kwargs) success = backend.upload(upload, filename, is_raw, *args, **kwargs) if success: file_uploaded.send(sender=self.__class__, backend=backend, request=request) # callback extra_context = backend.upload_complete(request, filename, *args, **kwargs) # let Ajax Upload know whether we saved it or not ret_json = {'success': success, 'filename': filename} if extra_context is not None: ret_json.update(extra_context) # although "application/json" is the correct content type, IE throws a fit return HttpResponse(json.dumps(ret_json, cls=DjangoJSONEncoder), content_type='text/html; charset=utf-8') else: response = HttpResponseNotAllowed(['POST']) response.write("ERROR: Only POST allowed") return response
def _ajax_upload(self, request, *args, **kwargs): if request.method == "POST": if request.is_ajax(): # the file is stored raw in the request upload = request is_raw = True # AJAX Upload will pass the filename in the querystring if it # is the "advanced" ajax upload try: if 'qqfile' in request.GET: filename = request.GET['qqfile'] else: filename = request.REQUEST['qqfilename'] except KeyError: return HttpResponseBadRequest("AJAX request not valid") # not an ajax upload, so it was the "basic" iframe version with # submission via form else: is_raw = False if len(request.FILES) == 1: # FILES is a dictionary in Django but Ajax Upload gives # the uploaded file an ID based on a random number, so it # cannot be guessed here in the code. Rather than editing # Ajax Upload to pass the ID in the querystring, observe # that each upload is a separate request, so FILES should # only have one entry. Thus, we can just grab the first # (and only) value in the dict. upload = request.FILES.values()[0] else: raise Http404("Bad Upload") filename = upload.name backend = self.get_backend() # custom filename handler filename = (backend.update_filename(request, filename, *args, **kwargs) or filename) # save the file backend.setup(filename, *args, **kwargs) success = backend.upload(upload, filename, is_raw, *args, **kwargs) if success: file_uploaded.send(sender=self.__class__, backend=backend, request=request) # callback extra_context = backend.upload_complete(request, filename, *args, **kwargs) # let Ajax Upload know whether we saved it or not ret_json = {'success': success, 'filename': filename} if extra_context is not None: ret_json.update(extra_context) # although "application/json" is the correct content type, IE throws a fit return HttpResponse(json.dumps(ret_json, cls=DjangoJSONEncoder), content_type='text/html; charset=utf-8') else: response = HttpResponseNotAllowed(['POST']) response.write("ERROR: Only POST allowed") return response