78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import os, glob, shutil, boto3, magic
 | 
						|
from botocore.exceptions import NoCredentialsError
 | 
						|
mime = magic.Magic(mime=True)
 | 
						|
## Configuration Part
 | 
						|
BUCKET_NAME = 'bigbluebutton'
 | 
						|
DELETE_SERVER_FILES = True ## Set False (F should be capital) if you don't want to delete files from bbb-server
 | 
						|
 | 
						|
def upload_to_aws(local_file, bucket, s3_file):
 | 
						|
    ctype = mime.from_file(local_file)
 | 
						|
    s3 = boto3.client('s3')
 | 
						|
 | 
						|
    try:
 | 
						|
        s3.upload_file(local_file, bucket, s3_file, ExtraArgs={'ContentType': ctype, 'ACL': "public-read"})
 | 
						|
        return True
 | 
						|
    except OSError as e:
 | 
						|
        if e.errno == errno.ENOENT:
 | 
						|
            print("\nFile not found\n")
 | 
						|
    except NoCredentialsError:
 | 
						|
        return False
 | 
						|
 | 
						|
def getListOfFiles(dirName):
 | 
						|
    listOfFile = os.listdir(dirName)
 | 
						|
    allFiles = list()
 | 
						|
    for entry in listOfFile:
 | 
						|
        fullPath = os.path.join(dirName, entry)
 | 
						|
        if os.path.isdir(fullPath):
 | 
						|
            allFiles = allFiles + getListOfFiles(fullPath)
 | 
						|
        else:
 | 
						|
            allFiles.append(fullPath)
 | 
						|
 | 
						|
    return allFiles
 | 
						|
 | 
						|
def getListOfDirs(path):
 | 
						|
    return [os.path.basename(x) for x in filter(
 | 
						|
        os.path.isdir, glob.glob(os.path.join(path, '*')))]
 | 
						|
 | 
						|
def remove(path):
 | 
						|
    """ param <path> could either be relative or absolute. """
 | 
						|
    if (os.path.isfile(path) or os.path.islink(path)) and "metadata.xml" not in path:
 | 
						|
        os.remove(path)  # remove the file
 | 
						|
    elif os.path.isdir(path):
 | 
						|
        shutil.rmtree(path)  # remove dir and all contains
 | 
						|
    else:
 | 
						|
        pass
 | 
						|
        #raise ValueError("file {} is not a file or dir.".format(path))
 | 
						|
 | 
						|
def main():
 | 
						|
 | 
						|
    dirName = os.getcwd();
 | 
						|
    listOfFiles = getListOfFiles(dirName)
 | 
						|
    listOfDirs = getListOfDirs(dirName)
 | 
						|
    for elem in listOfFiles:
 | 
						|
        listOfFiles = list()
 | 
						|
    for (dirpath, dirnames, filenames) in os.walk(dirName):
 | 
						|
        listOfFiles += [os.path.join(dirpath, file) for file in filenames]
 | 
						|
 | 
						|
    for elem in listOfFiles:
 | 
						|
        relative_path = elem.replace(dirName,'')[1:]
 | 
						|
        if(relative_path!='bbb-s3.py'):
 | 
						|
            print("\nUploading "+relative_path)
 | 
						|
            uploaded = upload_to_aws(elem, BUCKET_NAME, relative_path)
 | 
						|
            if(uploaded and DELETE_SERVER_FILES):
 | 
						|
                remove(elem)
 | 
						|
            else:
 | 
						|
                print("\nNot able to delete files from your bbb-server, check file if its uploaded")
 | 
						|
 | 
						|
    file_length = len(listOfFiles)
 | 
						|
    if(file_length==1):
 | 
						|
        for folder in listOfDirs:
 | 
						|
            remove(folder)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    main()
 |