Aviso:

Para brindarle información de soporte completa de manera más rápida, el contenido de esta página ha sido traducido al español mediante traducción automática. Para consultar la información de soporte más precisa, consulte la versión en inglés de este contenido.

Descargar objeto

Descargar un objeto

Los SDKs presentes en esta sección te permitirán descargar un objeto particular, múltiples objetos o una versión del objeto. La referencia de Bucket utilizada en el siguiente fragmento de código es la instancia del componente. El primer paso de la operación de descarga es una operación GET que recupera el objeto requerido del bucket. Para poder descargar un objeto, el solicitante debe tener permisos de acceso READ. Sin embargo, los propietarios del bucket tienen la opción de otorgar permisos de acceso READ a los usuarios, permitiéndoles descargar el objeto sin usar los encabezados de respuesta requeridos. Si Versioning está habilitado para tu bucket, necesitas pasar el versionId para descargar la versión particular del objeto. Si no se pasa ningún versionId, entonces por defecto se descargará la versión más reciente del objeto. Si Versioning fue habilitado para un bucket y luego deshabilitado. Por defecto, se descargará el objeto principal original. Para asegurarte de descargar la versión más reciente de este objeto, necesitas pasar el parámetro versionId con el valor “topVersion”.

copy
res = bucket.get_object("sam/out/sample.txt")
    # descarga el objeto a la máquina local
file = open('file_path','wb')
file.write(res)

Descargar una porción del objeto

El siguiente método del SDK se usa con el parámetro range. El parámetro range te permite descargar un range específico de bytes de un objeto.

copy
options = {
 'version_id': '01hx66f1383jm48w9sa4z20kve', # descargar el objeto con el Id de versión dado
 'range': '0-200' # rango de inicio y fin de un objeto
}
res = bucket.get_object('"sam/out/sample.txt", options)
    # descarga el objeto a la máquina local
file = open('file_path','wb')
file.write(res)

Descargar un objeto usando Transfer Manager

En esta sección, vamos a revisar los métodos del SDK que te permitirán descargar exitosamente objetos grandes de Stratus a tu sistema local usando la técnica de Transfer Manager. Transfer Manager es una operación donde el objeto grande se divide en múltiples rangos de bytes usando los bytes de inicio y fin del objeto. Cada una de las partes del objeto se devuelve como un stream y se descargan a tu sistema local.

Obtener instancia de Transfer Manager

Para realizar operaciones de transfer manager, necesitas obtener una instancia de objeto de transfer manager. Nos referiremos a esta instancia del componente en varios fragmentos de código donde trabajamos con operaciones de transfer manager realizadas en objetos almacenados en un bucket en Stratus. Parámetro utilizado bucket: Esta es la instancia de bucket que necesitas haber inicializado anteriormente usando este método del SDK. Asegúrate de que los siguientes paquetes estén importados

copy
from zcatalyst_sdk.stratus.transfer_manager import TransferManager
copy
transfer_manager = TranferManager(bucket)

Obtener objeto iterable

Devuelve las partes iterables del objeto. El usuario puede escribir estas partes en su máquina local usando un iterador.

Note: Usa un solo archivo para escribir porque devuelve partes iterables, no el objeto completo. Si escribes en archivos individuales, necesitarás combinarlos en uno solo.
Info: Asegúrate de proporcionar part_size en Mb.
copy
res = transfer_manager.get_iterable_object("sam/out/sample.txt", 20)
file = open('file_path','wb') # almacenar el objeto en la máquina local
for chunk in res:
        file.write(chunk)

Generar descargadores de partes del objeto

Cuando un usuario necesita descargar un archivo grande (ejemplo: archivo de 10 GB), usar el método get_object() no es práctico. En su lugar, el usuario puede optar por este método del SDK. Al llamar al método generate_part_downloaders() con los parámetros key(str) y part_size(Long), el usuario puede obtener funciones del transfer manager. Estas funciones, devueltas en orden ascendente, cada una descarga una parte específica del objeto. Las partes se determinan según el tamaño de parte especificado.

copy
res = transfer_manager.generate_part_downloaders("sam/out/sample.txt",20)
file = open('file_path','wb')
for part in res:
         file.write(part())
Info: El archivo debe ser subido a través de la API o el SDK para habilitar descargas parciales. El part_size debe ser mayor que 5 MB y menor que 100 MB.
### Generar URL prefirmada para descargar un objeto Las URLs prefirmadas son URLs seguras que los usuarios autenticados pueden compartir con sus usuarios no autenticados. Esta URL proporcionará a los usuarios no autenticados autorización temporal para acceder a los objetos. La referencia de Bucket utilizada en el siguiente fragmento de código es la instancia del componente.
Info: Para utilizar este método del SDK, necesitas inicializarlo con el alcance Admin. Puedes obtener más información sobre este requisito en esta sección
**Parámetros utilizados**
Nombre del parámetro Tipo de dato Definición
key String Un parámetro obligatorio. Contendrá el nombre completo del objeto junto con su ruta.
url_action Request Method Un parámetro obligatorio. Este es el parámetro que te permitirá generar una URL prefirmada para una acción de descarga (GET).
  • GET: Para descargar un objeto
expiry String Este es un parámetro opcional. El tiempo de validez de la URL en segundos.
  • Valor predeterminado: 3600 segundos
  • Valor mínimo: 30 segundos
  • Valor máximo: 7 días
active_from String Este es un parámetro opcional. Este parámetro contendrá el tiempo después del cual la URL es válida. El valor máximo es 7 días. Las URLs se activan tan pronto como se generan de forma predeterminada.
copy
pre_signed_url_res = bucket.generate_presigned_url("sam/out/sample.txt",url_action='GET',expiry_in_sec='300', active_from='1023453725828', version_id='jdery748tfge78')
print(pre_signed_url_res)

Respuesta de ejemplo para generar una URL prefirmada para descarga

copy
{
  "signature": "https://zcstratus123-development.zohostratus.com/_signed/sam/out/sample.txt?organizationId=83963316&stsCredential=74660608-83963316&stsDate=1726492859577&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=_G8mnq-03vKgPlnJPmqBvzEnT3Hk-SnECuG-cgURyDs",
  "expiry_in_seconds": "300",
  "active_from": "1726492859577"
}

Fragmento de ejemplo que ilustra el uso de URL prefirmada para descargar un objeto

copy
import requests
#URL prefirmada para descargar el archivo
url = "https://sadi-development.zohostratus.com/_signed/code.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747899927592&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=-l10AlSsbZzkq6t8HHgDfNkEiiDWFaaU9M3-hPBz0M8"
#Ruta donde se guardará el archivo descargado localmente
file_path = "file_path"  # Reemplazar con la ruta real del archivo
#Enviar una solicitud GET para descargar el archivo
response = requests.get(url, stream=True)
#Verificar si la solicitud fue exitosa
if response.status_code == 200:
    #Abrir el archivo de destino en modo de escritura binaria
    with open(file_path, "wb") as f:
        #Escribir datos en bloques para manejar archivos grandes
        for chunk in response.iter_content(chunk_size=8192):
            if chunk:
                f.write(chunk)
    print("Download completed successfully.")
else:
    print("Object download failed. Status code:", response.status_code)

Última actualización 2026-03-30 13:40:30 +0530 IST