华为OBS的使用

华为OBS的使用

基本概念

桶类似于容器,用于存储数据,在 OBS 中文件和文件夹统称为对象。

在一个桶中,最好存放统一使用目的的文件

对象

文件和文件夹统一称为对象

AK

access key id 用于 SDK 或使用客户端登录时的用户确认,类似于账号的用户名。

SK

secret key 用于 SDK 或使用客户端登录时的用户确认,类似于账号的密码。

ENDPOINT

endpoint 终端,表示 obs 的连接地址。

上述三个信息在桶的信息列表中有详细的展示。

python SDK

python SDK 的安装

pip install esdk-obs-python --trusted-host pypi.org

OBS 的连接

obs 操作首先需要获取 obs 的连接,如下所示

AK='HITIWZBYABHYGELMEUG5'
SK='guDwqhHZjxPb881A5pAkOjQj4fpZHAqSLdml73xF'
obs_endpoint='obs.cn-south-278.aipcc-gz.com'
obsClient = ObsClient(AK, SK,server=obs_endpoint)

在拿到 obs 之后,可以通过 obsClient 对象,对 obs 中的文件进行操作。

OBS 获取对象列表

#设置文件所在OBS桶
bucketName='cornell-dataset'
# bucketName='vk-dataset'
mark = None
length = 0
file_path = []
while True:
	# 获取对象列表,一次最大可获取1000,通过设置mark进行多于1000个对象的对象列表获取
    resp = obsClient.listObjects(bucketName, marker=mark, max_keys=1000)
    if resp.status < 300: 
	    # 对象信息在resp.body.contents中
        length += len(resp.body.contents)
        for file in resp.body.contents:
            file_path.append(file.key)
        if resp.body.is_truncated is True:
	        # 上述条件成立,表明还未完整获取到对象列表
            mark = resp.body.next_marker
        else:
            break
    else: 
	    # 异常处理
        print('errorCode:', resp.errorCode)
        print('errorMessage:', resp.errorMessage)
for file in file_path:
    if file.endswith('/'):
        print(f"删除{file}")
        file_path.remove(file)
print(len(file_path))
print(file_path)

OBS 下载图片

try:
    print("正在获取文件")
    resp = obsClient.getObject(bucketName, '01/pcd0100r.png', downloadPath=None, ) 
    # bucketName: 桶的名称
    # objectkey: 对象的名称
    # downloadPath: 下载路径,如果不进行保存,填入None。
    #如果需要保存,则填入保存路径:'./tmp.png'
    if resp.status < 300:
        response = resp.body.response
        chunk_size = 65536  # 一次性拉取文件的大小。
        data = b''  # 数据存储在该变量中。
        if response is not None:
            while True:
                chunk = response.read(chunk_size)
                if not chunk:
                    break
                data += chunk
            response.close()
    from PIL import Image
    import io
    # 转化图像数据
    image = Image.open(io.BytesIO(data))
    import matplotlib.pyplot as plt
    plt.imshow(img)
    plt.show()
        
    print("获取文件完成")
except:
    import traceback
    print(traceback.format_exc())

LICENSED UNDER CC BY-NC-SA 4.0