def download(args): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() if not isinstance(args.local_path, unicode): args.local_path = args.local_path.decode(fs_coding) if not isinstance(args. cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) # if args.cos_path.endswith('/') is False: # args.cos_path += '/' # if args.local_path.endswith('/') is True: # args.local_path += args.cos_path.split('/')[-2] # args.cos_path = args.cos_path[:-1] args.cos_path, args.local_path = concat_path(args.cos_path, args.local_path) if args.recursive: rt = Interface.download_folder(args.cos_path, args.local_path, args.force) if rt: logger.debug(change_color("download all files under \"{file}\" directory successfully".format(file=to_printable_str(args.cos_path)), color_green)) return 0 else: logger.debug(change_color("download all files under \"{file}\" directory failed".format(file=to_printable_str(args.cos_path)), color_red)) return -1 else: if Interface.download_file(args.cos_path, args.local_path, args.force) is True: return 0 else: return -1 return -1
def delete(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] Interface = client.op_int() if not isinstance(args. cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) if args.recursive: if args.cos_path.endswith('/') is False: args.cos_path += '/' if args.cos_path == '/': args.cos_path = '' if Interface.delete_folder(args.cos_path, args.force): logger.debug(change_color("delete all files under {cos_path} successfully!".format(cos_path=to_printable_str(args.cos_path)), color_green)) return 0 else: logger.debug(change_color("delete all files under {cos_path} failed!".format(cos_path=to_printable_str(args.cos_path)), color_red)) return -1 else: if Interface.delete_file(args.cos_path, args.force): logger.debug(change_color("delete all files under {cos_path} successfully!".format(cos_path=to_printable_str(args.cos_path)), color_green)) return 0 else: logger.debug(change_color("delete all files under {cos_path} failed!".format(cos_path=to_printable_str(args.cos_path)), color_red)) return -1
def download(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] Interface = client.op_int() if not isinstance(args.local_path, unicode): args.local_path = args.local_path.decode(fs_coding) if not isinstance(args. cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) if args.recursive: if args.cos_path.endswith('/') is False: args.cos_path += '/' if args.local_path.endswith('/') is False: args.local_path += '/' rt = Interface.download_folder(args.cos_path, args.local_path, args.force) if rt: logger.info(change_color("download all files under \"{file}\" directory successfully".format(file=to_printable_str(args.cos_path)), color_green)) return 0 else: logger.warn(change_color("download all files under \"{file}\" directory failed".format(file=to_printable_str(args.cos_path)), color_red)) return -1 else: if Interface.download_file(args.cos_path, args.local_path, args.force) is True: logger.info(change_color("download \"{file}\" successfully".format(file=to_printable_str(args.cos_path)), color_green)) return 0 else: logger.warn(change_color("download \"{file}\" failed".format(file=to_printable_str(args.cos_path)), color_red)) return -1 return -1
def mget(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] Interface = client.op_int() if not isinstance(args.local_path, unicode): args.local_path = args.local_path.decode(fs_coding) if not isinstance(args.cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) if Interface.mget(args.cos_path, args.local_path, args.force, args.num) is True: logger.debug( change_color( "mget \"{file}\" successfully".format( file=to_printable_str(args.cos_path)), color_green)) return 0 else: logger.debug( change_color( "mget \"{file}\" failed".format( file=to_printable_str(args.cos_path)), color_red)) return -1 return -1
def delete_bucket(args): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() if Interface.delete_bucket(): return 0 else: logger.warn("delete fail!") return -1
def delete_bucket(): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() if Interface.delete_bucket(): return 0 else: logger.warn(change_color("delete fail!", color_red)) return -1
def list_bucket(args): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() if Interface.get_bucket(args.cos_path): return 0 else: logger.warn(change_color("list fail!", color_red)) return -1
def get_bucket_acl(args): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() rt = Interface.get_bucket_acl() if rt is True: return 0 else: logger.warn("get fail!") return -1
def put_bucket_acl(args): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() rt = Interface.put_bucket_acl(args.grant_read, args.grant_write, args.grant_full_control) if rt is True: return 0 else: logger.warn(change_color("put fail!", color_red)) return -1
def create_bucket(args): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() if Interface.create_bucket(): logger.info(change_color("create success!", color_green)) return 0 else: logger.warn(change_color("create fail!", color_red)) return -1
def get_bucket_acl(): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() rt = Interface.get_bucket_acl() if rt is True: logger.info(change_color("get success!", color_green)) return 0 else: logger.warn(change_color("get fail!", color_red)) return -1
def info(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] if not isinstance(args.cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) Interface = client.op_int() if Interface.info_object(args.cos_path, _human=args.human): return 0 else: return -1
def signurl(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] try: Interface = client.op_int() rt = Interface.sign_url(args.cos_path, args.timeout) logger.info(rt) return True except Exception: logger.warn('geturl failed') return False
def list(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] if not isinstance(args. cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) Interface = client.op_int() if Interface.list_objects(cos_path=args.cos_path, _recursive=args.recursive, _all=args.all, _num=args.num, _human=args.human): return 0 else: logger.warn(change_color("list failed!", color_red))
def delete_bucket(args): conf = load_conf() client = CosS3Client(conf) Interface = client.op_int() if args.force is True: if Interface.delete_folder("") is False: logger.warn(change_color("delete files in bucket fail", color_red)) return -1 if Interface.delete_bucket(): logger.info(change_color("delete success!", color_green)) return 0 else: logger.warn(change_color("delete fail!", color_red)) return -1
def restore(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] if not isinstance(args. cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) Interface = client.op_int() if Interface.restore_object(cos_path=args.cos_path, _day=args.day, _tier=args.tier): return 0 else: # logger.warn(change_color("list failed!", color_red)) return -1
def upload(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] Interface = client.op_int() if not isinstance(args.local_path, unicode): args.local_path = args.local_path.decode(fs_coding) if not isinstance(args.cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) if not os.path.exists(args.local_path): logger.warn(change_color("cannot stat '%s': No such file or directory" % to_printable_str(args.local_path), color_red)) return -1 if not os.access(args.local_path, os.R_OK): logger.warn('local_path %s is not readable!' % to_printable_str(args.local_path)) return -1 if args.recursive: if os.path.isfile(args.local_path) is True: rt = Interface.upload_file(args.local_path, args.cos_path) elif os.path.isdir(args.local_path): if args.cos_path.endswith('/') is False: args.cos_path += '/' if args.local_path.endswith('/') is False: args.local_path += '/' rt = Interface.upload_folder(args.local_path, args.cos_path) logger.info("{folders} folders, {files} files successful, {fail_files} files failed" .format(folders=Interface._folder_num, files=Interface._file_num, fail_files=Interface._fail_num)) if rt: logger.info(change_color("upload all files under \"{file}\" directory successfully".format(file=to_printable_str(args.local_path)), color_green)) return 0 else: logger.warn(change_color("upload all files under \"{file}\" directory failed".format(file=to_printable_str(args.local_path)), color_red)) return -1 else: if os.path.isdir(args.local_path): logger.warn(change_color("\"{path}\" is a directory, use \'-r\' option to upload it please.".format(path=to_printable_str(args.local_path)), color_red)) return -1 if os.path.isfile(args.local_path) is False: logger.warn(change_color("cannot stat '%s': No such file or directory" % to_printable_str(args.local_path), color_red)) return -1 if Interface.upload_file(args.local_path, args.cos_path) is True: logger.info(change_color("upload \"{file}\" successfully".format(file=to_printable_str(args.local_path)), color_green)) return 0 else: logger.warn(change_color("upload \"{file}\" failed".format(file=to_printable_str(args.local_path)), color_red)) return -1 return -1
def get_object_acl(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] if not isinstance(args. cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) Interface = client.op_int() rt = Interface.get_object_acl(args.cos_path) if rt is True: return 0 else: logger.warn(change_color("get fail!", color_red)) return -1
def put_object_acl(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] if not isinstance(args. cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) Interface = client.op_int() rt = Interface.put_object_acl(args.grant_read, args.grant_write, args.grant_full_control, args.cos_path) if rt is True: logger.info(change_color("put success!", color_green)) return 0 else: logger.warn(change_color("put fail!", color_red)) return -1
def copy(args): conf = load_conf() client = CosS3Client(conf) while args.cos_path.startswith('/'): args.cos_path = args.cos_path[1:] Interface = client.op_int() _, args.cos_path = concat_path(args.source_path, args.cos_path) if not isinstance(args.source_path, unicode): args.source_path = args.source_path.decode(fs_coding) if not isinstance(args.cos_path, unicode): args.cos_path = args.cos_path.decode(fs_coding) if Interface.copy_file(args.source_path, args.cos_path, args.type) is True: return 0 else: return -1
def Test(): conf = CosConfig(Appid="1252448703", Region="cn-north", Access_id=ACCESS_ID, Access_key=ACCESS_KEY) client = CosS3Client(conf) test_bucket = 'test01' file_size = 2 # 方便CI通过 file_id = str(random.randint(0, 1000)) + str(random.randint(0, 1000)) file_name = "tmp" + file_id + "_" + str(file_size) + "MB" print "Test Get Presigned Download URL " url = client.get_presigned_download_url(Bucket=test_bucket, Key='test.txt') print url print "Test List Buckets" response = client.list_buckets() copy_source = {'Bucket': 'test01', 'Key': '/test.txt'} print "Test Copy Object From Other Bucket " response = client.copy_object(Bucket='test04', Key='test.txt', CopySource=copy_source) print "Test Put Object That Bucket Not Exist " + file_name try: response = client.put_object(Bucket='test0xx', Body='T' * 1024 * 1024, Key=file_name, CacheControl='no-cache', ContentDisposition='download.txt') except CosServiceError as e: print_error_msg(e) special_file_name = "对象()*'/. 存![]^&*~储{|}~()" print "Test Put Object Contains Special Characters " + special_file_name response = client.put_object(Bucket=test_bucket, Body='S' * 1024 * 1024, Key=special_file_name, CacheControl='no-cache', ContentDisposition='download.txt') print "Test Get Object Contains Special Characters " + special_file_name response = client.get_object( Bucket=test_bucket, Key=special_file_name, ) print "Test Delete Object Contains Special Characters " + special_file_name response = client.delete_object(Bucket=test_bucket, Key=special_file_name) print "Test Put Object " + file_name gen_file(file_name, file_size) fp = open(file_name, 'rb') response = client.put_object(Bucket=test_bucket, Body=fp, Key=file_name, CacheControl='no-cache', ContentDisposition='download.txt', Metadata={"x-cos-meta-tiedu": "value1"}) fp.close() os.remove(file_name) print "Test Get Object " + file_name response = client.get_object( Bucket=test_bucket, Key=file_name, ) # 返回一个raw stream # fp = response['Body'].get_raw_stream() # 返回一个generator # stream_generator = response['Body'].get_stream(stream_size=1024*512) response['Body'].get_stream_to_file('cos.txt') if os.path.exists('cos.txt'): os.remove('cos.txt') print "Test Head Object " + file_name response = client.head_object(Bucket=test_bucket, Key=file_name) print "Test Head Object " + file_name + "123" try: response = client.head_object(Bucket=test_bucket, Key=file_name + "123") except CosServiceError as e: print_error_msg(e) print "Test Put Object ACL " + file_name response = client.put_object_acl(Bucket=test_bucket, Key=file_name, ACL='public-read-write') print "Test Get Object ACL" + file_name response = client.get_object_acl(Bucket=test_bucket, Key=file_name) print "Test Delete Object " + file_name response = client.delete_object(Bucket=test_bucket, Key=file_name) print "Test List Objects" response = client.list_objects(Bucket=test_bucket) print "Test Create Bucket" response = client.create_bucket(Bucket='test' + file_id, ACL='public-read') print "Test PUT Bucket ACL" try: response = client.put_bucket_acl(Bucket='test' + file_id, ACL='public-read-writea') except CosServiceError as e: print_error_msg(e) print "Test GET Bucket ACL" response = client.get_bucket_acl(Bucket='test' + file_id, ) print "Test Delete Bucket" response = client.delete_bucket(Bucket='test' + file_id) print "Test Head Bucket" try: response = client.head_bucket(Bucket='test' + file_id) except CosServiceError as e: print_error_msg(e) print "Test Create MultipartUpload" response = client.create_multipart_upload( Bucket=test_bucket, Key='multipartfile.txt', ) uploadid = response['UploadId'] print "Test Abort MultipartUpload" response = client.abort_multipart_upload(Bucket=test_bucket, Key='multipartfile.txt', UploadId=uploadid) print "Test Create MultipartUpload" response = client.create_multipart_upload( Bucket=test_bucket, Key='multipartfile.txt', ) uploadid = response['UploadId'] print "Test Upload Part1" response = client.upload_part(Bucket=test_bucket, Key='multipartfile.txt', UploadId=uploadid, PartNumber=1, Body='A' * 1024 * 1024 * 2) print "Test Upload Part2" response = client.upload_part(Bucket=test_bucket, Key='multipartfile.txt', UploadId=uploadid, PartNumber=2, Body='B' * 1024 * 1024 * 2) print "List Upload Parts" response = client.list_parts(Bucket=test_bucket, Key='multipartfile.txt', UploadId=uploadid) lst = response['Part'] print "Test Complete MultipartUpload" response = client.complete_multipart_upload(Bucket=test_bucket, Key='multipartfile.txt', UploadId=uploadid, MultipartUpload={'Part': lst})
import hashlib import os import requests from cos_client import CosS3Client from cos_client import CosConfig from cos_exception import CosServiceError SECRET_ID = os.environ["SECRET_ID"] SECRET_KEY = os.environ["SECRET_KEY"] test_bucket = "test01-1252448703" test_object = "test.txt" special_file_name = "中文" + "→↓←→↖↗↙↘! \"#$%&'()*+,-./0123456789:;<=>@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~" conf = CosConfig(Region="ap-beijing-1", Secret_id=SECRET_ID, Secret_key=SECRET_KEY) client = CosS3Client(conf) def get_raw_md5(data): m2 = hashlib.md5(data) etag = '"' + str(m2.hexdigest()) + '"' return etag def gen_file(path, size): _file = open(path, 'w') _file.seek(1024 * 1024 * size) _file.write('cos') _file.close()