Em um bucket com versionamento ativado, a operação GetObject retorna apenas a versão atual de um objeto por padrão. Também é possível baixar uma versão específica ao especificar seu ID de versão.
Informações básicas
Ao chamar a operação GetObject em um bucket, ocorre um dos seguintes cenários:
Se a versão atual do objeto for um marcador de exclusão, o OSS retorna 404 Not Found.
Caso você especifique o versionId de um objeto no parâmetro de consulta, a versão indicada será retornada. Se definir o versionId como "null", o sistema retorna a versão do objeto que possui um versionId nulo.
Ao tentar recuperar um marcador de exclusão especificando seu versionId, o OSS retorna 405 Method Not Allowed.
Observações
Este tópico utiliza 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, utilize um endpoint interno. Para mais detalhes sobre regiões e endpoints do OSS, consulte Regiões e endpoints.
As credenciais de acesso neste exemplo são obtidas de variáveis de ambiente. Para saber como configurar credenciais de acesso, consulte Configurar credenciais de acesso (Python SDK V1).
O exemplo demonstra a criação de uma instância OSSClient com um endpoint do OSS. Para outras configurações, como uso de domínio personalizado ou autenticação via Security Token Service (STS), visualize Inicialização.
Para baixar um objeto, é necessária a permissão
oss:GetObject. Para mais informações, consulte Conceder uma política personalizada.
Código de exemplo
O código abaixo mostra 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 detalhes da API, consulte GetObject.