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.

Subir objeto

Los métodos del SDK listados en esta sección te permitirán subir objetos al bucket de diversas maneras. Puedes subir objetos como un string o como un stream. La referencia de Bucket utilizada en el siguiente fragmento de código es la instancia del componente. Si no tienes Versioning habilitado para tu objeto, y si Stratus recibe múltiples solicitudes de escritura para el mismo objeto, el objeto será sobrescrito continuamente. La última subida del objeto será el único objeto que se almacene. Sin embargo, con Versioning habilitado, cada subida se considerará una versión del objeto, y todas se almacenarán en el bucket, cada una con un version_id único.

Note: Los siguientes caracteres, incluido el espacio, no son compatibles cuando creas una ruta o un objeto: comillas dobles, ambos corchetes angulares, hashtag, barra invertida y símbolo de barra vertical.
### Subir objeto como stream Usando este método del SDK, puedes subir objetos a un bucket como un stream. Almacena el stream en una variable y luego pasa esa variable en el método de subida.
copy
file = open('file_path','rb')
res = bucket.put_object("sam/out/sample.txt",file)
print(res)

Subir objeto como string

Usando este método del SDK, puedes subir el objeto como un string. Pasarás el nombre del objeto y los datos a almacenar en el objeto en formato string en el método de subida; put_object()

copy
res = bucket.put_object("sam/out/sample.txt",'content of the file')
print(res)

Subir objeto con opciones

Usando este método del SDK, puedes utilizar las siguientes opciones mientras subes un objeto.

  • overwrite: Esta es una opción que puedes usar si Versioning para tu bucket no está habilitado. Sin versioning, necesitas usar esta opción si deseas sobrescribir un recurso. El valor predeterminado es ‘false’.
  • ttl: Esta es una opción que puedes usar para establecer el Time-to-Live (TTL) en segundos para un objeto. El valor debe ser mayor o igual a 60 segundos.
  • meta_data: Esta es una opción que puedes usar para subir detalles de metadatos del objeto que se está subiendo.
  • content_type: Esta es una opción que puedes proporcionar si necesitas establecer el tipo MIME del objeto.
copy
options = {
    'overwrite': 'true',
    'ttl': '300', #especificar el tiempo de vida en segundos
    'meta_data': {
        'author': 'John'
    } 
}
file = open('file_path','rb')
res = bucket.put_object("sam/out/sample.txt",file, options)
print(res)

Subir objeto con opción de extracción

Cuando subes un archivo zip usando el siguiente método, el archivo zip se extraerá y los objetos se subirán al bucket.

copy
# Definir opciones de subida incluyendo extract_upload
options = {
    # Sobrescribir el objeto si ya existe
    'overwrite': 'true',
    # Tiempo de vida en segundos después del cual el objeto expirará
    'ttl': '300',
    # Extraer automáticamente el contenido del archivo ZIP
    'extract_upload': 'true',
    # Tipo MIME del objeto
    'content-type': 'application/zip',
    # Metadatos personalizados asociados al objeto
    'meta_data': {
        'author': 'Sam'
    }
}
#Abrir el archivo en modo binario
file = open('sam.zip', 'rb')
#Subir y extraer el contenido del ZIP
res = bucket.put_object('sam/sample.zip', file, options)

Este método del SDK devolverá un task_id. Puedes usar este task_id en este método del SDK para conocer el estado de la extracción. Respuesta de ejemplo

copy
{ 'task_id': '1234263749' }

Subir objeto usando Multipart

En esta sección vamos a revisar los métodos del SDK que te permitirán subir exitosamente un objeto grande a un bucket en Stratus. La función de subida multipart subirá un archivo grande al bucket en múltiples solicitudes HTTPS. Todas estas solicitudes se combinarán en un solo objeto una vez que todas las partes individuales hayan sido subidas.

Note: Se recomienda que consideres Multipart Upload como el método preferido para subir objetos que sean de 100 MB o más.
#### Iniciar subida Multipart Para realizar operaciones multipart, necesitas obtener una instancia de objeto multipart. Nos referiremos a esta instancia del componente en varios fragmentos de código donde trabajamos con operaciones multipart 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.
copy
init_res = bucket.initiate_multipart_upload(key="")
print(init_res)

Respuesta de ejemplo

copy
{
  bucket: 'zcstratus123-development',
  key: 'objectName.txt',
  upload_id: '01j7xbm4vm5750zbedxqgc4q6m',
  status: 'PENDING'
}

Subir partes del objeto

En el siguiente método del SDK, vamos a realizar subidas de las partes individuales del objeto. Cada parte tendrá un partNumber distinto que varía entre 1 y 1000. Aunque esto representa el orden de las partes, estas partes no necesariamente se subirán en secuencia. Estas partes se combinarán en secuencia una vez que la subida de todas las partes de los objetos esté completa.

copy
upload_res = bucket.upload_part(key="",upload_id="", part_number=3, body=open('file_path','rb'))
print(upload_res)

Obtener resumen de subida Multipart

El siguiente método del SDK se puede usar para obtener un resumen operativo de todas las partes subidas. Para ver el resumen, usaremos el método get_multipart_upload_summary().

copy
summary_res = bucket.get_multipart_upload_summary(key="", upload_id="")
print(summary_res)

Respuesta de ejemplo

copy
{
    "bucket": "zcstratus12345-development",
    "key": "sasm.txt",
    "upload_id": "01hyfyeazrrstmt7k5fa7ej726",
    "status": "PENDING",
    "parts": [
        {
            "part_number": 1,
            "size": 0,
            "uploaded_at": 1716374678999
        },
        {
            "part_number": 2,
            "size": 2797094,
            "uploaded_at": 1716374678576
        },
        {
            "part_number": 4,
            "size": 0,
            "uploaded_at": 1716374679136
        }
    ]
}

Completar subida Multipart del objeto

El siguiente método nos permite terminar el proceso multipart una vez que todas las partes se han subido exitosamente. Para completar el proceso pasaremos el uploadId al método complete_multipart_upload().

copy
complete_res = bucket.complete_multipart_upload(key="", upload_id="")
print(complete_res)

Implementación de ejemplo del SDK

Package Imports
copy
from concurrent.futures import ThreadPoolExecutor
import zcatalyst_sdk
copy
def handler(request: Request):
    app = zcatalyst_sdk.initialize()
    if request.path == "/":
        # instancia de stratus
        stratus = app.stratus()
        # instancia del bucket
        bucket = stratus.bucket('bucket_name')
        # subida multiparte
        key = "sam/out/sample.txt"
        file_path = '/sam/smple.mp4'
        initiate_res = bucket.initiate_multipart_upload(key)
        part_number = 1
        part_size = 50 * 1024 * 1024
        futures = []
        try:
            with open(file_path, 'rb') as file:
                with ThreadPoolExecutor(max_workers=3) as executor:
                    while True:
                        chunk = file.read(part_size)
                        if not chunk:
                            break
                        futures.append(executor.submit(
        bucket.upload_part,
        key,
        initiate_res['upload_id'],
        chunk, part_number
        )
       )
                        part_number += 1
            for future in futures:
                future.result()
         except Exception as err:
            raise err
         multipart_upload_res = bucket.complete_multipart_upload(key, initiate_res['upload_id'])
        return multipart_upload_res
        else:
        response = make_response('Unknown path')
        response.status_code = 400
        return response

Subir un objeto usando Transfer Manager

Cuando el objeto que necesitas subir es demasiado grande para subirlo, puedes realizar una operación de transfer manager. La operación de transfer manager dividirá el objeto en múltiples partes y realizará una subida más rápida. En esta sección del SDK, vamos a revisar todos los métodos del SDK disponibles para subir objetos en Stratus usando Transfer Manager.

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

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

Subir un objeto usando Transfer Manager

En esta sección vamos a revisar los métodos del SDK que te permitirán subir exitosamente un objeto grande a un bucket en Stratus. La función de subida multipart subirá un archivo grande al bucket en múltiples solicitudes HTTPS. Todas estas solicitudes se combinarán en un solo objeto una vez que todas las partes individuales hayan sido subidas.

Note: Se recomienda que consideres Multipart Upload como el método preferido para subir objetos que sean de 100 MB o más.
#### Crear instancia Multipart Usando el siguiente método del SDK, vamos a generar un upload_id. Usando este ID vamos a crear y devolver una instancia que te permita realizar operaciones multipart en el objeto.
copy
init_ins = transfer_manager.create_multipart_instance(key="")

Si necesitas crear una instancia para una operación de subida multipart ya inicializada, entonces copia y usa el fragmento de código que se muestra a continuación.

copy
init_ins = transfer_manager.create_multipart_instance(key="", upload_id="")

Realizar subida Multipart para partes del objeto

En el siguiente método del SDK, vamos a realizar subidas de las partes individuales del objeto. Cada parte tendrá un part_number distinto que varía entre 1 y 1000. Aunque esto representa el orden de las partes, estas partes no necesariamente se subirán en secuencia. Estas partes se combinarán en secuencia una vez que la subida de todas las partes de los objetos esté completa. Parámetros utilizados

  • part_number: Tendrá el orden de las partes que se están subiendo.
  • body: Contendrá los datos/contenido del objeto.
copy
upload_res = init_ins.upload_part(body=open('file_path','rb'), part_number=3)
print(upload_res)

Obtener resumen de subida Multipart

El siguiente método del SDK se puede usar para obtener un resumen operativo de todas las partes subidas. Para ver el resumen, usaremos el método get_upload_summary().

copy
summary_res = init_ins.get_upload_summary()
print(summary_res)

Completar subida Multipart del objeto

El siguiente método nos permite terminar el proceso multipart una vez que todas las partes se han subido exitosamente. Para completar el proceso pasaremos el upload_id al método complete_upload().

copy
complete_res = init_ins.complete_upload()
print(complete_res)

Subir un objeto envolviendo toda la funcionalidad de Transfer Manager

El siguiente método del SDK actúa como un envoltorio, donde toda la operación de subida del transfer manager se lleva a cabo sin emplear múltiples pasos. Usando este método, el objeto se divide en múltiples partes, se sube al bucket en múltiples partes y luego se combina una vez que todas las partes están subidas.

Note: Para objetos que sean más grandes de 2GB, recomendamos que uses los métodos individuales del SDK para llevar a cabo la operación de subida multipart exitosamente.

copy
upload_res = transfer_res.put_object_as_parts(key='', body=open('file_path', 'rb'), part_size=50)
print(upload_res)

Generar URL prefirmada para subir 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 subida (PUT).
  • PUT: Para subir 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='PUT',expiry_in_sec='300', active_from='1023453725828')
print(pre_signed_url_res)

Respuesta de ejemplo para generar una URL prefirmada para subida

copy
{
  "signature": "https://sadi-development.zohostratus.com/_signed/code.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747899245773&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=YBPoNE9txCIUWWX3ntdgVd95VTt1jGFlSuvnTRFbCMQ"
file_path = "/Users/ranjitha-18338/Documents/Pyhton-SDK/filestore2.0/output.txt",
  "expiry_in_seconds": "300",
  "active_from": "1726492859577"
}

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

Package Imports
copy
import requests
copy
#Reemplazar con tu URL prefirmada real
url = "https://sadi-development.zohostratus.com/_signed/code.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747899245773&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=YBPoNE9txCIUWWX3ntdgVd95VTt1jGFlSuvnTRFbCMQ"
#Ruta al archivo local que deseas subir
file_path = "file_path"
#Establecer los encabezados requeridos
headers = {
    # 'Content-Type': 'text/plain',  # Especificar el tipo de contenido del archivo
    # 'overwrite': 'true',           # Encabezado personalizado opcional para indicar sobrescritura (si lo requiere el servidor)
}
#Abrir el archivo en modo de lectura binaria y enviar una solicitud PUT para subirlo
with open(file_path, 'rb') as f:
    files = {'file': f}  #Crear un payload de archivo
    response = requests.put(url, headers=headers, files=files)
    #Verificar el estado de la respuesta
    if response.status == 200:
        print('Object uploaded successfully')
    else:
        print('Object upload failed')

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