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
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.io.*;
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
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.*;
// 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
import com.zc.component.stratus.transfer.ZCTransferManager;
ZCTransferManager transferManager= ZCTransferManager.getInstance(bucket);
Descargar objeto como streams de partes iterables
Fragmento de código de ejemplo
import java.nio.file.StandardOpenOption;
import java.nio.file.Files;
import java.util.Iterator;
import java.nio.file.Path;
import java.io.*;
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
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.*;
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.
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.
|
| expiry | String | Este es un parámetro opcional. El tiempo de validez de la URL en segundos.
|
| 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
import com.zc.component.stratus.enums.URL_ACTION;
import org.json.simple.JSONObject;
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
import com.zc.component.stratus.enums.URL_ACTION;
import org.json.simple.JSONObject;
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
{
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
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;
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
Yes
No
Send your feedback to us