def handle_upload(request, resource_id): check_permission(request) if request.method == "DELETE": return cancel_upload(resource_id) if request.method == "HEAD": return upload_info(resource_id) elif request.method == "PATCH": return upload_part(request, resource_id)
def start_upload(request): check_permission(request) response = get_tus_response() if request.META.get("HTTP_TUS_RESUMABLE", None) is None: logger.warning( "Received File upload for unsupported file transfer protocol") response.status_code = 500 response.reason_phrase = ( "Received File upload for unsupported file transfer protocol") return response metadata = {} upload_metadata = request.META.get("HTTP_UPLOAD_METADATA", None) if upload_metadata: for kv in upload_metadata.split(","): (key, value) = kv.split(" ") metadata[key] = base64.b64decode(value).decode("utf-8") logger.info(f"TUS post metadata={metadata}") file_size = int(request.META.get("HTTP_UPLOAD_LENGTH", "0")) resource_id = str(uuid.uuid4()) cache.add( "tus-uploads/{}/filename".format(resource_id), metadata.get("filename"), conf.TIMEOUT, ) cache.add("tus-uploads/{}/file_size".format(resource_id), file_size, conf.TIMEOUT) cache.add("tus-uploads/{}/offset".format(resource_id), 0, conf.TIMEOUT) cache.add("tus-uploads/{}/metadata".format(resource_id), metadata, conf.TIMEOUT) try: with Path(get_upload_path()).joinpath(resource_id).open("wb") as f: pass except IOError as e: logger.error( "Unable to create file: {}".format(e), exc_info=True, extra={ "request": request, }, ) response.status_code = 500 return response response.status_code = 201 response["Location"] = "{}{}".format(request.build_absolute_uri(), resource_id) return response
def dispatch(self, *args, **kwargs): check_permission(self.request) override_method = self.request.META.get('HTTP_X_HTTP_METHOD_OVERRIDE', None) if override_method: self.request.method = override_method logger.info("TUS dispatch", extra={ 'requestMETA': self.request.META, "requestMethod": self.request.method }) return super(TusUpload, self).dispatch(*args, **kwargs)
def dispatch(self, *args, **kwargs): check_permission(self.request) logger.info(f"TUS dispatch method={self.request.method}") return super(TusUpload, self).dispatch(*args, **kwargs)