Em um bucket com controle de versão ativado, a operação GetObject retorna, por padrão, apenas a versão atual do objeto. Também é possível baixar uma versão específica ao informar o respectivo ID da versão.
Informações básicas
Ao chamar a operação GetObject em um bucket, ocorre um dos cenários a seguir:
Se a versão atual do objeto for um marcador de exclusão, o OSS retornará 404 Not Found.
Caso você especifique o
versionIdno parâmetro de consulta, a versão correspondente será retornada. Ao definir oversionIdcomo"null", o sistema retornará a versão do objeto que possuiversionIdnulo.Se você tentar recuperar um marcador de exclusão ao especificar o respectivo
versionId, o OSS retornará 405 Method Not Allowed.
Observações
Este tópico utiliza o endpoint público da região China (Hangzhou). Caso pretenda acessar o OSS a partir de outros serviços da Alibaba Cloud na mesma região, utilize um endpoint interno. Para saber mais sobre as regiões e endpoints do OSS, consulte Regions and endpoints.
As credenciais de acesso utilizadas neste exemplo são obtidas por meio de variáveis de ambiente. Para detalhes sobre como configurar essas credenciais, consulte Configure access credentials using OSS SDK for Python 1.0.
O código abaixo demonstra como criar uma instância
OSSClientcom um endpoint do OSS. Para configurações alternativas, como o uso de domínio personalizado ou autenticação via Security Token Service (STS), consulte Initialization.Para baixar um objeto, você precisa da permissão
oss:GetObject. Para mais detalhes, consulte Grant a custom policy.
Código de exemplo
O exemplo a seguir ilustra como baixar uma versão específica de um objeto:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain access credentials from environment variables. Before you run this 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 where the bucket is located. For example, if the bucket is in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# Specify the region that corresponds to the endpoint, for example, cn-hangzhou. Note that this parameter is required for V4 signatures.
region = "cn-hangzhou"
# Replace yourBucketName with the name of the bucket.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)
# Download a specific version of an object.
params = dict()
params['versionId'] = '<yourObjectVersionId>'
object_stream = bucket.get_object('<yourObjectName>', params=params)
# Read the content of the downloaded object.
read_content = object_stream.read()
print('get object content:', read_content)
# View the version ID of the downloaded object.
print('get object versionid:', object_stream.versionid)
# The get_object operation returns a stream. The CRC checksum is calculated only after read() is called.
# Therefore, you must perform a CRC check after the call.
if object_stream.client_crc != object_stream.server_crc:
print("The CRC checksum between client and server is inconsistent!")
Referências
Para conhecer os detalhes da API, consulte GetObject.