def get_file_upload(self): if 'flowFilename' not in self.request.args: return None total_file_size = int(self.request.args['flowTotalSize'][0]) flow_identifier = self.request.args['flowIdentifier'][0] chunk_size = len(self.request.args['file'][0]) if ((chunk_size / (1024 * 1024)) > self.state.tenant_cache[1].maximum_filesize or (total_file_size / (1024 * 1024)) > self.state.tenant_cache[1].maximum_filesize): log.err("File upload request rejected: file too big") raise errors.FileTooBig(self.state.tenant_cache[1].maximum_filesize) if flow_identifier not in Uploads: Uploads.set(flow_identifier, SecureTemporaryFile(Settings.tmp_upload_path)) f = Uploads.get(flow_identifier) f.write(self.request.args['file'][0]) if self.request.args['flowChunkNumber'][0] != self.request.args['flowTotalChunks'][0]: return None mime_type, encoding = mimetypes.guess_type(self.request.args['flowFilename'][0]) if mime_type is None: mime_type = 'application/octet-stream' return { 'name': self.request.args['flowFilename'][0], 'type': mime_type, 'size': total_file_size, 'path': f.filepath, 'body': f, 'description': self.request.args.get('description', [''])[0] }
def get_file_upload(self): try: if (int(self.request.arguments['flowTotalSize'][0]) / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize: log.err("File upload request rejected: file too big") raise errors.FileTooBig(GLSettings.memory_copy.maximum_filesize) if self.request.arguments['flowIdentifier'][0] not in GLUploads: f = GLSecureTemporaryFile(GLSettings.tmp_upload_path) GLUploads[self.request.arguments['flowIdentifier'][0]] = f else: f = GLUploads[self.request.arguments['flowIdentifier'][0]] f.write(self.request.files['file'][0]['body']) if self.request.arguments['flowChunkNumber'][0] != self.request.arguments['flowTotalChunks'][0]: return None uploaded_file = {} uploaded_file['filename'] = self.request.files['file'][0]['filename'] uploaded_file['content_type'] = self.request.files['file'][0]['content_type'] uploaded_file['body_len'] = int(self.request.arguments['flowTotalSize'][0]) uploaded_file['body_filepath'] = f.filepath uploaded_file['body'] = f return uploaded_file except errors.FileTooBig: raise # propagate the exception except Exception as exc: log.err("Error while handling file upload %s" % exc) return None
def get_file_upload(self): try: if len(self.request.files) != 1: raise errors.InvalidInputFormat( "cannot accept more than a file upload at once") chunk_size = len(self.request.files['file'][0]['body']) total_file_size = int( self.request.arguments['flowTotalSize'][0] ) if 'flowTotalSize' in self.request.arguments else chunk_size flow_identifier = self.request.arguments['flowIdentifier'][ 0] if 'flowIdentifier' in self.request.arguments else generateRandomKey( 10) if ((chunk_size / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize or (total_file_size / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize): log.err("File upload request rejected: file too big") raise errors.FileTooBig( GLSettings.memory_copy.maximum_filesize) if flow_identifier not in GLUploads: f = GLSecureTemporaryFile(GLSettings.tmp_upload_path) GLUploads[flow_identifier] = f else: f = GLUploads[flow_identifier] f.write(self.request.files['file'][0]['body']) if 'flowChunkNumber' in self.request.arguments and 'flowTotalChunks' in self.request.arguments: if self.request.arguments['flowChunkNumber'][ 0] != self.request.arguments['flowTotalChunks'][0]: return None uploaded_file = {} uploaded_file['filename'] = self.request.files['file'][0][ 'filename'] uploaded_file['content_type'] = self.request.files['file'][0][ 'content_type'] uploaded_file['body_len'] = total_file_size uploaded_file['body_filepath'] = f.filepath uploaded_file['body'] = f upload_time = time.time() - f.creation_date track_handler(self) return uploaded_file except errors.FileTooBig: raise # propagate the exception except Exception as exc: log.err("Error while handling file upload %s" % exc) return None
def get_file_upload(self): try: if len(self.request.files) != 1: raise errors.InvalidInputFormat("cannot accept more than a file upload at once") chunk_size = len(self.request.files['file'][0]['body']) total_file_size = int(self.request.arguments['flowTotalSize'][0]) if 'flowTotalSize' in self.request.arguments else chunk_size flow_identifier = self.request.arguments['flowIdentifier'][0] if 'flowIdentifier' in self.request.arguments else generateRandomKey(10) if ((chunk_size / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize or (total_file_size / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize): log.err("File upload request rejected: file too big") raise errors.FileTooBig(GLSettings.memory_copy.maximum_filesize) if flow_identifier not in GLUploads: f = GLSecureTemporaryFile(GLSettings.tmp_upload_path) GLUploads[flow_identifier] = f else: f = GLUploads[flow_identifier] f.write(self.request.files['file'][0]['body']) if 'flowChunkNumber' in self.request.arguments and 'flowTotalChunks' in self.request.arguments: if self.request.arguments['flowChunkNumber'][0] != self.request.arguments['flowTotalChunks'][0]: return None uploaded_file = {} uploaded_file['filename'] = self.request.files['file'][0]['filename'] uploaded_file['content_type'] = self.request.files['file'][0]['content_type'] uploaded_file['body_len'] = total_file_size uploaded_file['body_filepath'] = f.filepath uploaded_file['body'] = f upload_time = time.time() - f.creation_date # file uploads works on chunk basis so that we count 1 the file upload # as a whole in function get_file_upload() for event in outcoming_event_monitored: if event['status_checker'](self._status_code) and \ event['method'] == self.request.method and \ event['handler_check'](self.request.uri): EventTrack(event, upload_time) return uploaded_file except errors.FileTooBig: raise # propagate the exception except Exception as exc: log.err("Error while handling file upload %s" % exc) return None
def get_file_upload(self): try: chunk_size = len(self.request.args['file'][0]) total_file_size = int( self.request.args['flowTotalSize'] [0]) if 'flowTotalSize' in self.request.args else chunk_size flow_identifier = self.request.args['flowIdentifier'][ 0] if 'flowIdentifier' in self.request.args else generateRandomKey( 10) if ((chunk_size / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize or (total_file_size / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize): log.err("File upload request rejected: file too big") raise errors.FileTooBig( GLSettings.memory_copy.maximum_filesize) if flow_identifier not in GLUploads: f = GLSecureTemporaryFile(GLSettings.tmp_upload_path) GLUploads[flow_identifier] = f else: f = GLUploads[flow_identifier] f.write(self.request.args['file'][0]) if 'flowChunkNumber' in self.request.args and 'flowTotalChunks' in self.request.args: if self.request.args['flowChunkNumber'][ 0] != self.request.args['flowTotalChunks'][0]: return None mime_type, encoding = mimetypes.guess_type( self.request.args['flowFilename'][0]) uploaded_file = { 'name': self.request.args['flowFilename'][0], 'type': mime_type, 'size': total_file_size, 'path': f.filepath, 'body': f, 'description': self.request.args.get('description', [''])[0] } return uploaded_file except errors.FileTooBig: raise # propagate the exception except Exception as exc: log.err("Error while handling file upload %s" % exc) return None
def process_file_upload(self): if b'flowFilename' not in self.request.args: return total_file_size = int(self.request.args[b'flowTotalSize'][0]) file_id = self.request.args[b'flowIdentifier'][0].decode() chunk_size = len(self.request.args[b'file'][0]) if ((chunk_size // (1024 * 1024)) > self.state.tenant_cache[self.request.tid].maximum_filesize or (total_file_size // (1024 * 1024)) > self.state.tenant_cache[self.request.tid].maximum_filesize): log.err("File upload request rejected: file too big", tid=self.request.tid) raise errors.FileTooBig( self.state.tenant_cache[self.request.tid].maximum_filesize) if file_id not in self.state.TempUploadFiles: self.state.TempUploadFiles[file_id] = SecureTemporaryFile( Settings.tmp_path) f = self.state.TempUploadFiles[file_id] with f.open('w') as f: f.write(self.request.args[b'file'][0]) if self.request.args[b'flowChunkNumber'][0] != self.request.args[ b'flowTotalChunks'][0]: return None f.finalize_write() mime_type, _ = mimetypes.guess_type( self.request.args[b'flowFilename'][0].decode()) if mime_type is None: mime_type = 'application/octet-stream' filename = self.request.args[b'flowFilename'][0].decode() self.uploaded_file = { 'id': file_id, 'date': datetime_now(), 'name': filename, 'type': mime_type, 'size': total_file_size, 'filename': os.path.basename(f.filepath), 'body': f, 'description': self.request.args.get(b'description', [''])[0] }
def get_file_upload(self): try: if (int(self.request.arguments['flowTotalSize'][0]) / (1024 * 1024)) > GLSettings.memory_copy.maximum_filesize: log.err("File upload request rejected: file too big") raise errors.FileTooBig( GLSettings.memory_copy.maximum_filesize) if self.request.arguments['flowIdentifier'][0] not in GLUploads: f = GLSecureTemporaryFile(GLSettings.tmp_upload_path) GLUploads[self.request.arguments['flowIdentifier'][0]] = f else: f = GLUploads[self.request.arguments['flowIdentifier'][0]] f.write(self.request.files['file'][0]['body']) if self.request.arguments['flowChunkNumber'][ 0] != self.request.arguments['flowTotalChunks'][0]: return None uploaded_file = {} uploaded_file['filename'] = self.request.files['file'][0][ 'filename'] uploaded_file['content_type'] = self.request.files['file'][0][ 'content_type'] uploaded_file['body_len'] = int( self.request.arguments['flowTotalSize'][0]) uploaded_file['body_filepath'] = f.filepath uploaded_file['body'] = f upload_time = time.time() - f.creation_date # file uploads works on chunk basis so that we count 1 the file upload # as a whole in function get_file_upload() for event in outcoming_event_monitored: if event['status_checker'](self._status_code) and \ event['method'] == self.request.method and \ event['handler_check'](self.request.uri): EventTrack(event, upload_time) return uploaded_file except errors.FileTooBig: raise # propagate the exception except Exception as exc: log.err("Error while handling file upload %s" % exc) return None