Este tópico descreve como listar objetos em um bucket com versionamento ativado. Você pode listar todos os objetos, uma quantidade específica de objetos ou apenas aqueles cujos nomes contenham um prefixo definido.
Observações
Este tópico usa o endpoint público da região China (Hangzhou). Para acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, use um endpoint interno. Para obter mais informações sobre regiões e endpoints do OSS, consulte Regiões e endpoints.
Neste tópico, as credenciais de acesso são obtidas de variáveis de ambiente. Para obter mais informações sobre como configurar credenciais de acesso, consulte Configurar credenciais de acesso (Python SDK V1).
Este tópico demonstra a criação de uma instância OSSClient com um endpoint do OSS. Para configurações alternativas, como uso de domínio personalizado ou autenticação via Security Token Service (STS), consulte Inicialização.
Para listar objetos, você deve ter a permissão
oss:ListObjectVersions. Para obter mais informações, consulte Conceder uma política personalizada.
Listar as versões de todos os objetos em um bucket
O código a seguir exemplifica como listar as versões de todos os objetos, incluindo marcadores de exclusão, em um bucket específico:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Call the list_object_versions operation to list the versions of objects in a versioning-enabled bucket.
# List the versions of all objects, including delete markers in the bucket.
result = bucket.list_object_versions()
# List the versions of all objects in the bucket.
next_key_marker = None
next_versionid_marker = None
while True:
result = bucket.list_object_versions(key_marker=next_key_marker, versionid_marker=next_versionid_marker)
# Display the versions of the listed objects.
for version_info in result.versions:
print('version_info.versionid:', version_info.versionid)
print('version_info.key:', version_info.key)
print('version_info.is_latest:', version_info.is_latest)
# Display the versions of the listed delete markers.
for del_maker_Info in result.delete_marker:
print('del_maker.key:', del_maker_Info.key)
print('del_maker.versionid:', del_maker_Info.versionid)
print('del_maker.is_latest:', del_maker_Info.is_latest)
is_truncated = result.is_truncated
# Check whether all versions of all objects in the bucket are listed. If the versions of all objects are incompletely listed, the list operation continues. If the versions of all objects are completely listed, the list operation stops.
if is_truncated:
next_key_marker = result.next_key_marker
next_versionid_marker = result.next_versionid_marker
else:
break
Listar versões de objetos com um prefixo específico
O exemplo a seguir mostra como listar as versões de objetos cujos nomes contenham um prefixo determinado:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Call the list_object_versions operation to list the versions of objects in a versioning-enabled bucket.
# List the versions of all objects, including delete markers in the bucket.
result = bucket.list_object_versions()
# List the versions of objects whose names contain the test- prefix.
prefix = 'test-'
next_key_marker = None
next_versionid_marker = None
while True:
result = bucket.list_object_versions(prefix=prefix, key_marker=next_key_marker, versionid_marker=next_versionid_marker)
# Display the versions of the listed objects.
for version_info in result.versions:
print('version_info.versionid:', version_info.versionid)
print('version_info.key:', version_info.key)
print('version_info.is_latest:', version_info.is_latest)
# Display the versions of the listed delete markers.
for del_maker_Info in result.delete_marker:
print('del_maker.key:', del_maker_Info.key)
print('del_maker.versionid:', del_maker_Info.versionid)
print('del_maker.is_latest:', del_maker_Info.is_latest)
is_truncated = result.is_truncated
# Check whether all versions of all objects in the bucket are listed. If the versions of all objects are incompletely listed, the list operation continues. If the versions of all objects are completely listed, the list operation stops.
if is_truncated:
next_key_marker = result.next_key_marker
next_versionid_marker = result.next_versionid_marker
else:
break
Listar versões de uma quantidade específica de objetos
O código a seguir exemplifica como listar as versões de um número específico de objetos:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4.
region = "cn-hangzhou"
# Specify the name of your bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Call the list_object_versions operation to list the versions of objects in a versioning-enabled bucket.
# List the versions of all objects, including delete markers in the bucket.
result = bucket.list_object_versions()
# List up to 200 object versions.
max_keys = 200
result = bucket.list_object_versions(max_keys=max_keys)
# Display the versions of the listed objects.
for version_info in result.versions:
print('version_info.versionid:', version_info.versionid)
print('version_info.key:', version_info.key)
print('version_info.is_latest:', version_info.is_latest)
# Display the versions of the listed delete markers.
for del_maker_Info in result.delete_marker:
print('del_maker.key:', del_maker_Info.key)
print('del_maker.versionid:', del_maker_Info.versionid)
print('del_maker.is_latest:', del_maker_Info.is_latest)
# Check whether the listing is truncated.
# If the number of objects in the bucket is greater than 200, the value of is_truncated is True, which indicates that the listing is truncated. If the number of objects in the bucket is smaller than 200, the value of is_truncated is False, which indicates that the listing is not truncated.
print('is truncated', result.is_truncated)
Listar objetos por diretório
O OSS armazena objetos em uma estrutura plana. Um diretório é um objeto de zero bytes cujo nome termina com uma barra (/). É possível fazer upload e download de diretórios. Por padrão, o console do OSS exibe como diretório qualquer objeto cujo nome termine com uma barra (/).
Para listar objetos organizados por diretório, especifique os parâmetros delimiter e prefix na solicitação.
Se você definir prefix como o nome de um diretório na solicitação, serão listados objetos e subdiretórios cujos nomes contenham esse prefixo.
Se você especificar um prefixo e definir delimiter como uma barra (/) na solicitação, serão listados objetos e subdiretórios cujos nomes comecem com o prefixo especificado no diretório. Cada subdiretório é listado como um único elemento de resultado em CommonPrefixes. Os objetos e diretórios dentro desses subdiretórios não são listados.
Exemplo: Um bucket chamado examplebucket contém os seguintes objetos: oss.jpg, fun/test.jpg, fun/movie/001.avi e fun/movie/007.txt. A barra (/) é usada como delimitador para o diretório. A estrutura a seguir mostra os objetos e os diretórios no bucket examplebucket.
examplebucket
└── oss.jpg
└── fun
└── test.jpg
└── movie
└── 001.avi
└── 007.txt
Os exemplos a seguir descrevem como listar objetos em diretórios simulados.
-
Listar as versões de objetos no diretório raiz de um bucket
O código a seguir exemplifica como listar as versões dos objetos no diretório raiz de um bucket:
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4. region = "cn-hangzhou" # Specify the name of your bucket. bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region) # Call the list_object_versions operation to list the versions of objects in a versioning-enabled bucket. # List the versions of all objects, including delete markers in the bucket. result = bucket.list_object_versions() # Specify the forward slash (/) as the delimiter. delimiter = "/" next_key_marker = None next_versionid_marker = None while True: result = bucket.list_object_versions(delimiter=delimiter, key_marker=next_key_marker, versionid_marker=next_versionid_marker) # Display the versions of the listed objects. for version_info in result.versions: print('version_info.versionid:', version_info.versionid) print('version_info.key:', version_info.key) print('version_info.is_latest:', version_info.is_latest) # Display the versions of the listed delete markers. for del_maker_Info in result.delete_marker: print('del_maker.key:', del_maker_Info.key) print('del_maker.versionid:', del_maker_Info.versionid) print('del_maker.is_latest:', del_maker_Info.is_latest) # Display the directories whose names end with a forward slash (/). for common_prefix in result.common_prefix: print("common_prefix:", common_prefix) is_truncated = result.is_truncated # Check whether all versions of all objects in the bucket are listed. If the versions of all objects are incompletely listed, the list operation continues. If the versions of all objects are completely listed, the list operation stops. if is_truncated: next_key_marker = result.next_key_marker next_versionid_marker = result.next_versionid_marker else: breakResultado
('version_info.versionid:', 'CAEQEhiBgMCw8Y7FqBciIGIzMDE3MTEzOWRiMDRmZmFhMmRlMjljZWI0MWU4****') ('version_info.key:', 'oss.jpg') ('version_info.is_latest:', True) ('common_prefix:', 'fun/') -
Listar objetos e subdiretórios em um diretório específico
O código a seguir exemplifica como listar objetos e subdiretórios em um diretório de um bucket:
# -*- coding: utf-8 -*- import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider # Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # Specify the ID of the region that maps to the endpoint. Example: cn-hangzhou. This parameter is required if you use the signature algorithm V4. region = "cn-hangzhou" # Specify the name of your bucket. bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region) # Call the list_object_versions operation to list the versions of objects in a versioning-enabled bucket. # List the versions of all objects including delete markers in a bucket. result = bucket.list_object_versions() # Set delimiter to a forward slash (/) and prefix to fun/. prefix = "fun/" delimiter = "/" next_key_marker = None next_versionid_marker = None while True: result = bucket.list_object_versions(prefix=prefix, delimiter=delimiter, key_marker=next_key_marker, versionid_marker=next_versionid_marker) # Display the versions of the listed objects. for version_info in result.versions: print('version_info.versionid:', version_info.versionid) print('version_info.key:', version_info.key) print('version_info.is_latest:', version_info.is_latest) # Display the versions of the listed delete markers. for del_maker_Info in result.delete_marker: print('del_maker.key:', del_maker_Info.key) print('del_maker.versionid:', del_maker_Info.versionid) print('del_maker.is_latest:', del_maker_Info.is_latest) # Display the directories whose names end with a forward slash (/). for common_prefix in result.common_prefix: print("common_prefix:", common_prefix) is_truncated = result.is_truncated # Check whether all versions of all objects in the bucket are listed. If the versions of all objects are incompletely listed, the list operation continues. If the versions of all objects are completely listed, the list operation stops. if is_truncated: next_key_marker = result.next_key_marker next_versionid_marker = result.next_versionid_marker else: breakResultado
('version_info.versionid:', 'CAEQFRiBgMCh9JDkrxciIGE3OTNkYzFhYTc2YzQzOTQ4Y2MzYjg2YjQ4ODg*****') ('version_info.key:', 'fun/test.jpg') ('version_info.is_latest:', True) ('commonPrefix:', 'fun/movie/')
Referências
Para obter mais informações sobre a operação de API que você pode chamar para listar objetos, consulte ListObjectVersions (GetBucketVersions).