En un bucket con control de versiones habilitado, la operación GetObject devuelve únicamente la versión actual de un objeto de forma predeterminada. También puede descargar una versión específica si indica su ID de versión.
Contexto
Al invocar la operación GetObject en un bucket, se presenta uno de los siguientes casos:
Si la versión actual del objeto es un marcador de eliminación, OSS devuelve 404 Not Found.
Si especifica el versionId de un objeto en el parámetro de consulta, se devuelve la versión indicada. Si establece versionId como "null", se obtiene la versión del objeto cuyo versionId es nulo.
Si intenta recuperar un marcador de eliminación mediante su versionId, OSS devuelve 405 Method Not Allowed.
Notas
En este tema se utiliza el endpoint público de la región China (Hangzhou). Para acceder a OSS desde otros servicios de Alibaba Cloud en la misma región, utilice un endpoint interno. Para obtener más información sobre las regiones y endpoints de OSS, consulte Regions and endpoints.
En este tema, las credenciales de acceso se obtienen de variables de entorno. Para más detalles sobre cómo configurar las credenciales de acceso, consulte Configure access credentials using OSS SDK for Python 1.0.
Este tema muestra cómo crear una instancia de OSSClient con un endpoint de OSS. Para otras configuraciones, como usar un dominio personalizado o autenticarse con credenciales de Security Token Service (STS), consulte Initialization.
Para descargar un objeto, debe contar con el permiso
oss:GetObject. Para obtener más información, consulte Grant a custom policy.
Código de ejemplo
El siguiente código de ejemplo muestra cómo descargar una versión específica de un 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!")
Referencias
Para consultar los detalles de la API, consulte GetObject.