class OSS(object): def __init__(self, ak, sk, region): self.c = Connection(ak, sk, host=region) self.buckets = self.c.get_all_buckets() def print_all_buckets(self): for b in self.buckets: print(b.name) def print_key_name(self, bucket_name): b = self.c.get_bucket(bucket_name) for k in b.list(): print(k.name) def create_bucket(self): raise NotImplementedError def get_md5(self, filename): with open(filename, 'rb') as f: md5 = hashlib.md5() md5.update(f.read()) #return (md5.digest(), md5.digest().encode('base64')[:-1]) return md5 def upload(self, pathname, bucket_name, policy="public-read"): """upload file or dir to specified bucket""" b = self.c.get_bucket(bucket_name) if os.path.isfile(pathname): key_name = os.path.basename(pathname) k = b.new_key(key_name) md5 = self.get_md5(pathname) print(pathname) print(key_name) k.set_contents_from_filename( pathname, policy=policy, md5=(md5.digest(), md5.digest().encode('base64')[:-1])) elif os.path.isdir(pathname): basename = os.path.basename(pathname) print(basename) for root, dirs, files in os.walk(pathname): for f in files: filename = os.path.join(root, f) key_name = "%s/%s" % ( basename, filename.replace(pathname, "").replace( os.path.sep, '/').lstrip('/')) k = b.new_key(key_name) md5 = self.get_md5(filename) print(filename) print(key_name) k.set_contents_from_filename( filename, policy=policy, md5=(md5.digest(), md5.digest().encode('base64')[:-1]))
def test_encryption_multipart_upload(self): import math, os from ks3.encryption import Crypts Crypts.generate_key('D:/', 'key.txt') c = Connection(ak, sk, host="", is_secure=False, domain_mode=False, local_encrypt=True, local_key_path="D:/key.txt") from filechunkio import FileChunkIO bucket = c.get_bucket(test_bucket) source_path = 'D:/1.exe' source_size = os.stat(source_path).st_size mp = bucket.initiate_multipart_upload(os.path.basename(source_path), calc_encrypt_md5=False) chunk_size = 5242880 chunk_count = int(math.ceil(source_size // chunk_size)) print(chunk_count) for i in range(chunk_count + 1): offset = chunk_size * i last = False bytes = min(chunk_size, source_size - offset) if i == chunk_count + 1: last = True with FileChunkIO(source_path, 'r', offset=offset, bytes=bytes) as fp: mp.upload_part_from_file(fp, part_num=i + 1, is_last_part=last) mp.complete_upload()
class Conn: def __init__(self, ak, sk, host, bucket): self.bucket = bucket self.ksyun = Connection(ak, sk, host=host) if not self._exist(bucket): self.ksyun.create_bucket(bucket) assert self._exist(bucket) def _exist(self, bucket): buckets = [b.name for b in self.ksyun.get_all_buckets()] return bucket in buckets def upload(self, keyname, filename): try: bucket = self.ksyun.get_bucket(self.bucket) key_object = bucket.new_key(keyname) key_object.set_contents_from_filename(filename) return {"result": 0, "msg": keyname} except: return {"result": -1, "msg": traceback.format_exc()} pass def download(self, filename, keyname): try: bucket = self.ksyun.get_bucket(self.bucket) key_object = bucket.get_key(keyname) key_object.get_contents_to_filename(filename) return {"result": 0, "msg": filename} except: return {"result": -1, "msg": traceback.format_exc()} pass def make_key(self, app_key, version, package_name): return ''.join([ app_key, md5.new(version).hexdigest(), md5.new(package_name).hexdigest() ]).lower()
def test_encryption_upload(self): from ks3.encryption import Crypts Crypts.generate_key('D:/', 'key.txt') c = Connection(ak, sk, host="", is_secure=False, domain_mode=False, local_encrypt=True, local_key_path="D:/key.txt") b = c.get_bucket(test_bucket) #put kw = b.new_key(test_key) ret = kw.set_contents_from_string("some thing") #get get_key = b.get_key(test_key) s = get_key.get_contents_as_string() print("Result:", s)
## GIf ak/sk ak = 'Sb1VoKVZsflmAP2hle8l' sk = 'JRpqvaDOeKA279PYWulIWeBcfVUHUFsJUhkS6ozo' #kss.ksyun.com hangzhou bucket domain #c = Connection(ak, sk, host="kss.ksyun.com") #kss.ksyun.com beijing bucket domain c = Connection(ak, sk, host="ks3-cn-beijing.ksyun.com") bucket_name = "kuaishou-hls" #key_name = "record/live/111/hls/111.m3u8" #stra="#EXT-X-TARGETDURATION:5" #strb="#EXT-X-TARGETDURATION:15\n" b = c.get_bucket(bucket_name) ''' def change_duration(file): fh = open("/tmp/1/"+file,'w+') #fh.readlines() # lines = open("/tmp/1/"+file,'w+').readlines() for i in fh.readlines(): print i #print lines #lines[3] = lines[3].replace(stra,strb) ''' for line in open("giflist"): key_name = line.strip("\n") k = b.get_key(key_name) s = k.get_contents_as_string()
#!/bin/python # -*- coding: UTF-8 -*- from ks3.connection import Connection ak = 'TnivEIMCaLje6fGL20oK' sk = 'lmppx27iWiOOxiMIwUe4HYldLmrPb0aHTIafYf53' c = Connection(ak, sk, host="kss.ksyun.com") my_bucket = "vod" buckets = c.get_all_buckets() b = c.get_bucket(my_bucket) keys = b.list() acp = b.get_acl() print acp for k in keys: print k ''' for b in buckets: #print b.name if b.name = my_bucket: acp = my_bucket.get_acl() print acp.acl.grant.permission #acp = sqtest.get_acl() #for grant in acp.acl.grants: #print acp.acl.grant.permission #print grant.permission, grant.display_name, grant.email_address, grant.id
def __connect_ks(self): ksConnect = Connection(self.__access_key, self.__secret_key, host=self.__endpoint) bucket = ksConnect.get_bucket(self.__bucket) return bucket
ak = sys.argv[1] sk = sys.argv[2] bucket_name = sys.argv[3] publish_dir = sys.argv[4] remote_dir = sys.argv[5] cdn_url = sys.argv[6] print "bucket_name: " + bucket_name print "publish_dir: " + publish_dir print "remote_dir: " + remote_dir print "cdn_url: " + cdn_url from ks3.connection import Connection connection = Connection(ak, sk, host=ks3_host, is_secure=True, domain_mode=False) bucket = connection.get_bucket(bucket_name) def upload_file(key_name, filename): try: key = bucket.new_key(key_name) ret = key.set_contents_from_filename(filename, policy="public-read") if ret and ret.status == 200: return True except: pass return False def upload_dir(x, dir_name, files): for filename in files: