class HWOBS: def __init__(self): self.obsclient = ObsClient(access_key_id=current_app.config.HW_ACCESS_KEY_ID, secret_access_key=current_app.config.HW_SECRET_ACCESS_KEY, server=current_app.config.HW_SERVER) def mv(self, srcbucketname, src_obj_key, destbucketname, dest_obj_key): """移动对象""" resp = self.obsclient.copyObject(srcbucketname, src_obj_key, destbucketname, dest_obj_key) if resp.status >= 300: raise Exception("OBS MV 复制对象出错 errorMessage:", resp.errorMessage, "errorCode:", resp.errorCode) else: res = self.obsclient.deleteObject(srcbucketname, src_obj_key) if res.status >= 300: raise Exception("OBS MV 删除源对象时出错 errorMessage:", res.errorMessage, "errorCode:", res.errorCode)
# Create bucket print('Create a new bucket for demo\n') obsClient.createBucket(bucketName) # Setting object mime type headers = PutObjectHeader(contentType='text/plain') # Setting self-defined metadata metadata = {'meta1': 'value1', 'meta2': 'value2'} resp = obsClient.putContent(bucketName, objectKey, 'Hello OBS', metadata=metadata, headers=headers) if resp.status < 300: print('Create object ' + objectKey + ' successfully!\n') else: print('common msg:status:', resp.status, ',errorCode:', resp.errorCode, ',errorMessage:', resp.errorMessage) # Get object metadata resp = obsClient.getObjectMetadata(bucketName, objectKey) header = dict(resp.header) print('\tContentType:' + header.get('content-type')) print('\tmeta1:' + header.get('meta1')) print('\tmeta2:' + header.get('meta2')) obsClient.deleteObject(bucketName, objectKey)
class bucket(): def __init__(self, access_key_id=None, secret_access_key=None, server=None, bucketName=None): # 创建ObsClient实例 self.base_folder = "/" if access_key_id == None or secret_access_key == None or server == None: print( "# ----- Error invalid OBS server config please check parameter of obs server" ) exit(0) else: self.obsClient = ObsClient(access_key_id=access_key_id, secret_access_key=secret_access_key, server=server) if bucketName != None: self.bucketName = bucketName self.bucketClient = self.obsClient.bucketClient(bucketName) print( "# ---------------------------------------------------------------------------- #" ) print( "# Bucket ToolKit #" ) print( "# ---------------------------------------------------------------------------- #" ) print("# ----access key (AK) : ", access_key_id) print("# ----secret key (SK): ", secret_access_key) print("# ----server : ", server) print("# ----bucket name : ", bucketName) print("# ----root : ", self.base_folder) print( "# ---------------------------------------------------------------------------- #" ) def getBucketMetadata(self): print('Getting bucket metadata\n') #resp = obsClient.getBucketMetadata(bucketName, origin='http://www.b.com', requestHeaders='Authorization1') resp = self.bucketClient.getBucketMetadata( origin='http://www.b.com', requestHeaders='Authorization1') print('storageClass:', resp.body.storageClass) print('accessContorlAllowOrigin:', resp.body.accessContorlAllowOrigin) print('accessContorlMaxAge:', resp.body.accessContorlMaxAge) print('accessContorlExposeHeaders:', resp.body.accessContorlExposeHeaders) print('accessContorlAllowMethods:', resp.body.accessContorlAllowMethods) print('accessContorlAllowHeaders:', resp.body.accessContorlAllowHeaders) print('Deleting bucket CORS\n') resp = self.bucketClient.deleteBucketCors() print('status' + str(resp.status)) return resp def upload(self, remote_path, local_path): self.obsClient.putFile(self.bucketName, remote_path, local_path) # print("# ===== Uploading ",local_path," ===to : ",remote_path) def download(self, key, download): # print("# ===== Downloading ",key," === to :",download) self.obsClient.getObject(self.bucketName, key, downloadPath=download) def cd(self, folder_key): self.base_folder = folder_key print("# ===== Base Folder", self.base_folder) def delete(self, key): print('# ===== Deleting object ' + key + '\n') self.obsClient.deleteObject(self.bucketName, key) def check(self, key): """ The Sync will overwrite by default. We need check """ assert not self.obsClient.getObject( self.bucketName, key )["status"] < 300, "\n# ===== ERROR : \n# ===== bucket : ({bucketname})\n# ===== key : ({key}) & local upload flow try to overwrite same key".format( bucketname=self.bucketName, key=key) # def mkdir(self,dir): # pass def ls(self, show_item_count=10): print("# ===== list ({path}): ".format(path=self.base_folder)) # resp = self.obsClient.listObjects(self.bucketName) if self.base_folder == "/": resp = self.obsClient.listObjects(self.bucketName) else: resp = self.obsClient.listObjects(self.bucketName, self.base_folder) keylist = [] print("# ===== object count : ", len(resp.body.contents)) for content in resp.body.contents[:show_item_count]: keylist.append(content.key) print(' |--- : ' + content.key + ' etag[' + content.etag + ']') return keylist
# 引入模块 from obs import ObsClient # 创建ObsClient实例 obsClient = ObsClient(access_key_id='******', secret_access_key='******', server='https://obs.cn-north-4.myhuaweicloud.com') # 使用访问OBS # resp = obsClient.getBucketMetadata('dli-cn-north-4-aae035c879b649ac93c1b3738fb7d56d') # print(resp) resp = obsClient.getObjectMetadata( 'dli-cn-north-4-aae035c879b649ac93c1b3738fb7d56d', 'cat/3.png') print(resp) resp = obsClient.deleteObject( 'dli-cn-north-4-aae035c879b649ac93c1b3738fb7d56d', 'cat1/a/') print(resp) resp = obsClient.getObjectMetadata( 'dli-cn-north-4-aae035c879b649ac93c1b3738fb7d56d', 'cat1') print(resp) # 关闭obsClient obsClient.close()