Python SDK 手册

文件管理

在 NOS 中,用户可以通过一系列的接口管理桶 (Bucket) 中的文件 (Object),比如 list_objects,delete_object,copy_object 等。

列出桶中的文件

你可以使用 list_objects 列出桶中的文件:

import nos

access_key = "你的 accessKeyId"
secret_key = "你的 accessKeySecret"
end_point = "建桶时选择的的区域域名"
bucket = "使用的桶名,注意命名规则"

client = nos.Client(access_key, secret_key, end_point=end_point)

try:
  object_lists = client.list_objects(bucket)
for object_list in object_lists["response"].findall("Contents"):
  print object_list.find("Key").text
except nos.exceptions.ServiceException as e:
  print (
    "ServiceException: %s\n"
    "status_code: %s\n"
    "error_type: %s\n"
    "error_code: %s\n"
    "request_id: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.status_code,  # 错误 http 状态码
    e.error_type,   # NOS 服务器定义错误类型
    e.error_code,   # NOS 服务器定义错误码
    e.request_id,   # 请求 ID,有利于 nos 开发人员跟踪异常请求的错误原因
    e.message       # 错误描述信息
  )
except nos.exceptions.ClientException as e:
  print (
    "ClientException: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.message       # 客户端错误信息
  )

list_objects 可以指定的可选参数如下所示:

参数说明
delimiter用于对 Object 名字进行分组的字符。所有名字包含指定的前缀且第一次出现 delimiter 字符之间的 object 作为一组元素
prefix限定返回的 object key 必须以 prefix 作为前缀。注意使用 prefix 查询时,返回的 key 中仍会包含 prefix
limit限定此次返回 object 的最大数,如果不设定,默认为 100
marker设定结果从 marker 之后按字母排序的第一个开始返回

删除单个文件

你可以使用 delete_object 删除单个需要删除的文件:

import nos

access_key = "你的 accessKeyId"
secret_key = "你的 accessKeySecret"
end_point = "建桶时选择的的区域域名"
bucket = "使用的桶名,注意命名规则"
object = "使用的对象名,注意命名规则"

client = nos.Client(access_key, secret_key, end_point=end_point)

try:
  client.delete_object(bucket, object)
except nos.exceptions.ServiceException as e:
  print (
    "ServiceException: %s\n"
    "status_code: %s\n"
    "error_type: %s\n"
    "error_code: %s\n"
    "request_id: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.status_code,  # 错误 http 状态码
    e.error_type,   # NOS 服务器定义错误类型
    e.error_code,   # NOS 服务器定义错误码
    e.request_id,   # 请求 ID,有利于 nos 开发人员跟踪异常请求的错误原因
    e.message       # 错误描述信息
  )
except nos.exceptions.ClientException as e:
  print (
    "ClientException: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.message       # 客户端错误信息
  )

删除多个文件

你可以使用 delete_objects 批量删除文件:

import nos

access_key = "你的 accessKeyId"
secret_key = "你的 accessKeySecret"
end_point = "建桶时选择的的区域域名"
bucket = "使用的桶名,注意命名规则"
keys=["your-objectname1", "your-objectname2", "your-objectname3"]

client = nos.Client(access_key, secret_key, end_point=end_point)

try:
  client.delete_objects(bucket, keys)
except nos.exceptions.ServiceException as e:
  print (
    "ServiceException: %s\n"
    "status_code: %s\n"
    "error_type: %s\n"
    "error_code: %s\n"
    "request_id: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.status_code,  # 错误 http 状态码
    e.error_type,   # NOS 服务器定义错误类型
    e.error_code,   # NOS 服务器定义错误码
    e.request_id,   # 请求 ID,有利于 nos 开发人员跟踪异常请求的错误原因
    e.message       # 错误描述信息
  )
except nos.exceptions.ClientException as e:
  print (
    "ClientException: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.message       # 客户端错误信息
  )

拷贝文件

你可以使用 copy_object 拷贝文件:

import nos

access_key = "你的 accessKeyId"
secret_key = "你的 accessKeySecret"
end_point = "建桶时选择的的区域域名"
bucket = "使用的桶名,注意命名规则"
src_object = "拷贝来源的对象名,注意命名规则"
dst_object = "拷贝目的的对象名,注意命名规则"

client = nos.Client(access_key, secret_key, end_point=end_point)

try:
  client.copy_object(bucket, src_object, bucket, dst_object)
except nos.exceptions.ServiceException as e:
  print (
    "ServiceException: %s\n"
    "status_code: %s\n"
    "error_type: %s\n"
    "error_code: %s\n"
    "request_id: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.status_code,  # 错误 http 状态码
    e.error_type,   # NOS 服务器定义错误类型
    e.error_code,   # NOS 服务器定义错误码
    e.request_id,   # 请求 ID,有利于 nos 开发人员跟踪异常请求的错误原因
    e.message       # 错误描述信息
  )
except nos.exceptions.ClientException as e:
  print (
    "ClientException: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.message       # 客户端错误信息
  )

Attention

支持跨桶的文件 copy

移动文件

你可以使用 move_object 移动文件:

import nos

access_key = "你的 accessKeyId"
secret_key = "你的 accessKeySecret"
end_point = "建桶时选择的的区域域名"
bucket = "使用的桶名,注意命名规则"
src_object = "移动来源的对象名,注意命名规则"
dst_object = "移动目的的对象名,注意命名规则"

client = nos.Client(access_key, secret_key, end_point=end_point)

try:
  client.move_object(bucket, src_object, bucket, dst_object)
except nos.exceptions.ServiceException as e:
  print (
    "ServiceException: %s\n"
    "status_code: %s\n"
    "error_type: %s\n"
    "error_code: %s\n"
    "request_id: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.status_code,  # 错误 http 状态码
    e.error_type,   # NOS 服务器定义错误类型
    e.error_code,   # NOS 服务器定义错误码
    e.request_id,   # 请求 ID,有利于 nos 开发人员跟踪异常请求的错误原因
    e.message       # 错误描述信息
  )
except nos.exceptions.ClientException as e:
  print (
    "ClientException: %s\n"
    "message: %s\n"
  ) % (
    e,
    e.message       # 客户端错误信息
  )

Attention

暂时不支持跨桶的文件 move