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”.
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.
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
from zcatalyst_sdk.stratus.transfer_manager import TransferManager
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.
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.
res = transfer_manager.generate_part_downloaders("sam/out/sample.txt",20)
file = open('file_path','wb')
for part in res:
file.write(part())
| 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).
|
| expiry | String | Este es un parámetro opcional. El tiempo de validez de la URL en segundos.
|
| 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. |
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
{
"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
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
Yes
No
Send your feedback to us