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

Los SDKs presentes en esta sección te permitirán descargar un objeto particular, 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, por defecto se descargará la última versión del objeto.

Si Versioning fue habilitado para un bucket y luego deshabilitado, por defecto se descargará el objeto principal primero. Para asegurarte de descargar la última versión de este objeto, necesitas pasar el parámetro versionId con el valor “topVersion”.

Fragmento de código de ejemplo


Package Imports
copy
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.io.*;
copy
InputStream dataStream = bucket.getObject("sam/out/sample.txt");
// descargar el objeto a tu máquina local
Path path = Path.of("file_path");  // especificar una ruta para almacenar el objeto descargado
Files.copy(dataStream, path, StandardCopyOption.REPLACE_EXISTING);

Descargar una porción del objeto

El siguiente SDK implementa el método setRange(). Este método te permite descargar un rango específico de bytes de un objeto.

Fragmento de código de ejemplo


Package Imports
copy
import com.zc.component.stratus.beans.ZCGetObjectOptions;
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.io.*;
copy
// agregar opciones de descarga
ZCGetObjectOptions options = ZCGetObjectOptions.getInstance();
options.setVersionId("3yt5ehjbjghds3i28");
options.setRange("20-200"); // rango inicial y final del objeto en bytes
InputStream dataStream = bucket.getObject("sam/out/sample.txt", options);
// descargar el objeto a tu máquina local
Path path = Path.of("file_path"); // especificar una ruta para almacenar el objeto descargado
Files.copy(dataStream, path, StandardCopyOption.REPLACE_EXISTING);

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 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.

Crear instancia de Transfer Manager

Fragmento de código de ejemplo


Package Imports
copy
import com.zc.component.stratus.transfer.ZCTransferManager;
copy
ZCTransferManager transferManager= ZCTransferManager.getInstance(bucket);

Descargar objeto como streams de partes iterables

Fragmento de código de ejemplo


Package Imports
copy
import java.nio.file.StandardOpenOption;
import java.nio.file.Files;
import java.util.Iterator;
import java.nio.file.Path;
import java.io.*;
copy
Iterable <InputStream> Iterable = transferManager.getIterableObject("sam/out/sample.txt", 100 L);
Path path = Path.of("file_path");
Iterator <InputStream> res = Iterable.iterator();
while (res.hasNext()) {
    InputStream data = res.next(); // obtener cada parte del objeto como stream
    Files.copy(data, path, StandardCopyOption.REPLACE_EXISTING); // escribir el stream en la ruta de archivo local
}

Generar partes de objeto para descarga

En este método del SDK descargaremos una porción del objeto que se encuentra dentro del rango requerido de bytes de inicio y fin.

Parámetros utilizados

  • PartSize: Es el tamaño de cada parte en Mb
  • key: Contendrá el nombre del objeto

Fragmento de código de ejemplo


Package Imports
copy
import java.nio.file.StandardOpenOption;
import java.nio.file.Files;
import com.zc.component.stratus.beans.ZCStratusGetObject;
import java.nio.file.Path;
import java.io.*;
copy
Path path = Path.of("file_path");
// obtener la lista de funciones de partes
List<ZCStratusGetObject> parts = transferManager.generatePartDownloaders("sam/out/sample.txt", 100L);
// crear un archivo para almacenar el stream descargado.
Files.createFile(path);
int partNumber = 1;
// ejecutar cada función para descargar las partes del objeto
for (ZCStratusGetObject part : parts) {
// obtener la parte del objeto como stream
 InputStream inputStream = part.getPart();
  System.out.println("Part "+ partNumber++ + " Downloaded");
// escribir los datos del stream en la máquina local
  Files.write(path, inputStream.readAllBytes(), StandardOpenOption.APPEND);
}

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 objetos. La referencia de Bucket utilizada en el siguiente fragmento de código es la instancia del componente.

Info: Para usar este método del SDK, necesitas inicializarlo con el scope 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 Enum Un parámetro obligatorio. Este es el parámetro que te permitirá generar una URL prefirmada para la acción de descarga.
  • URL_ACTION.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
activeFrom 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 por defecto.

Fragmento de código de ejemplo


Package Imports
copy
import com.zc.component.stratus.enums.URL_ACTION;
import org.json.simple.JSONObject;
copy
JSONObject res = bucket.generatePreSignedUrl("sam/out/sample.txt",URL_ACTION.GET);
System.out.println(res.get("signature"));

Generar URL prefirmada con tiempo de expiración y activación

Fragmento de código de ejemplo


Package Imports
copy
import com.zc.component.stratus.enums.URL_ACTION;
import org.json.simple.JSONObject;
copy
JSONObject res = bucket.generatePreSignedUrl("object_name",URL_ACTION.GET, "expiry_in","active_from");
System.out.println(res.get("signature"));

Ejemplo de respuesta para generar una URL prefirmada para descarga

copy
{
  signature: 'https://sadi-development.zoho stratus.com/_signed/text.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747896279887&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=3YBUX1HFSxNQzQJjFrln82AyJsEEuC5T9dsZwWxGyEE'
}

Ejemplo de fragmento que ilustra el uso de URL prefirmada para subir un objeto

Package Imports
copy
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
copy
public class Download {
    public static void main(String[] args) throws IOException {
        // Crear una instancia de OkHttpClient para manejar la solicitud HTTP
        OkHttpClient client = new OkHttpClient();
        // Construir la solicitud GET con la URL pre-firmada
        Request request1 = new Request.Builder()
                .url("https://sadi-development.zohostratus.com/_signed/sam.txt?organizationId=96862383&stsCredential=96858154-96862383&stsDate=1747905744487&stsExpiresAfter=300&stsSignedHeaders=host&stsSignature=pCjV9xckDOqBCueE_gBeMbp12StddTghBK_8HUwU5k0") // Reemplazar con su URL real
                .build();
        // Ejecutar la solicitud y manejar la respuesta
        try (Response response1 = client.newCall(request1).execute()) {
            // Verificar si la respuesta fue exitosa
            if (!response1.isSuccessful()) {
                throw new IOException("Unexpected code " + response1);
            }
            // Obtener el cuerpo de la respuesta como un InputStream
            ResponseBody body = response1.body();
            if (body != null) {
                // Crear un stream para escribir el archivo en disco
                try (InputStream in = body.byteStream();
                     OutputStream out = new FileOutputStream("file_path")) { // Reemplaza file_path con la ruta real
                    // Leer los datos de la respuesta en bloques y escribir en el archivo
                    byte[] buffer = new byte[8192];
                    int len;
                    while ((len = in.read(buffer)) != -1) {
                        out.write(buffer, 0, len);
                    }
                    // Imprimir confirmación después de descarga exitosa
                    System.out.println("Download complete.");
                }
            }
        } catch (IOException e) {
            // Imprimir traza de pila si ocurre un error durante la descarga
            e.printStackTrace();
        }
    }
}

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