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]))
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()
#!/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