Acceso S3
This commit is contained in:
parent
35908fe7c0
commit
9f1c623f7d
@ -6,19 +6,16 @@ import java.time.Duration;
|
||||
|
||||
import org.lapaloma.pfc.gestores.GestorClientesServiciosAWS;
|
||||
|
||||
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
|
||||
import software.amazon.awssdk.services.s3.S3Client;
|
||||
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
|
||||
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
|
||||
import software.amazon.awssdk.services.s3.model.PutObjectResponse;
|
||||
import software.amazon.awssdk.services.s3.model.S3Exception;
|
||||
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
|
||||
import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest;
|
||||
import software.amazon.awssdk.services.s3.presigner.model.PutObjectPresignRequest;
|
||||
|
||||
public class AppPrincipal {
|
||||
private final static String NOMBRE_BUCKET_EN_S3 = "s3-obj-proyecto1";
|
||||
|
||||
private static final int TIEMPO_VIDA_MINUTOS_URL = 60;
|
||||
private static final int TIEMPO_VIDA_MINUTOS_URL = 10;
|
||||
|
||||
public static void main(String[] args) {
|
||||
// TODO Auto-generated method stub
|
||||
@ -30,58 +27,51 @@ public class AppPrincipal {
|
||||
File documentoEjemplo = new File("fichero/subida_archivos_a_s3.jpg");
|
||||
String claveDocumento = idProyecto + "/" + numeroHito + "/" + documentoEjemplo.getName();
|
||||
|
||||
app.almacenarDocumentoEnS3(claveDocumento, documentoEjemplo);
|
||||
String urlDocumentoAlmacenado = app.almacenarDocumentoEnS3(claveDocumento, documentoEjemplo);
|
||||
System.out.println("URL del objeto en S3 para hacer un 'PUT': " + urlDocumentoAlmacenado);
|
||||
|
||||
String url = app.obtenerURLObjetoS3(claveDocumento);
|
||||
System.out.println("URL del objeto en S3: " + url);
|
||||
String urlDocumentoConsultado = app.consultarDocumentoEnS3(claveDocumento);
|
||||
System.out.println("URL del objeto en S3 para hacer un 'GET': " + urlDocumentoConsultado);
|
||||
}
|
||||
|
||||
|
||||
private void almacenarDocumentoEnS3(String clave, File documento) {
|
||||
|
||||
// Crear el cliente de S3 (usando SDK v2)
|
||||
S3Client clienteS3 = GestorClientesServiciosAWS.getClienteBucketS3();
|
||||
|
||||
|
||||
// Solicitud para subir el archivo
|
||||
PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket(NOMBRE_BUCKET_EN_S3).key(clave)
|
||||
.build();
|
||||
|
||||
try {
|
||||
// Realizar la carga del archivo
|
||||
PutObjectResponse response = clienteS3.putObject(putObjectRequest, documento.toPath());
|
||||
|
||||
// Imprimir respuesta de éxito
|
||||
System.out.println("Archivo subido correctamente. ETag: " + response.eTag());
|
||||
} catch (S3Exception e) {
|
||||
System.err.println("No se pudo insertar el ítem: " + e.getMessage());
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
clienteS3.close();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
private String obtenerURLObjetoS3(String claveDocumento) {
|
||||
private String almacenarDocumentoEnS3(String clave, File documento) {
|
||||
String urlObjetoS3 = null;
|
||||
// Crear el cliente de S3 (usando SDK v2)
|
||||
//S3Client clienteS3 = GestorClientesServiciosAWS.getClienteBucketS3();
|
||||
|
||||
// Usar el perfil `learnerlab-profile` (el nombre del perfil en `~/.aws/credentials`)
|
||||
ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create("default");
|
||||
// Solicitud para subir el archivo (método PUT)
|
||||
PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket(NOMBRE_BUCKET_EN_S3).key(clave).build();
|
||||
|
||||
// Crear el cliente presigner de S3 con el perfil específico
|
||||
S3Presigner presigner = S3Presigner.builder().region(GestorClientesServiciosAWS.REGION_AWS)
|
||||
.credentialsProvider(credentialsProvider) // Usar el perfil especificado
|
||||
.build();
|
||||
// Crear el cliente presigner de S3
|
||||
S3Presigner presigner = GestorClientesServiciosAWS.getClientePrefirmadorBucketS3();
|
||||
|
||||
// Crear la solicitud de obtención de objeto
|
||||
// Generar la URL firmada
|
||||
PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
|
||||
.signatureDuration(Duration.ofMinutes(TIEMPO_VIDA_MINUTOS_URL)) // Tiempo expiración URL firmada
|
||||
.putObjectRequest(putObjectRequest)
|
||||
.build();
|
||||
|
||||
// Obtener la URL firmada
|
||||
URL presignedUrl = presigner.presignPutObject(presignRequest).url();
|
||||
urlObjetoS3 = presignedUrl.toString();
|
||||
|
||||
// Cerrar el presigner
|
||||
presigner.close();
|
||||
|
||||
return urlObjetoS3;
|
||||
}
|
||||
|
||||
private String consultarDocumentoEnS3(String claveDocumento) {
|
||||
String urlObjetoS3 = null;
|
||||
|
||||
// Crear la solicitud de obtención de objeto (método GET)
|
||||
GetObjectRequest getObjectRequest = GetObjectRequest.builder().bucket(NOMBRE_BUCKET_EN_S3).key(claveDocumento)
|
||||
.build();
|
||||
|
||||
// Crear el cliente presigner de S3
|
||||
S3Presigner presigner = GestorClientesServiciosAWS.getClientePrefirmadorBucketS3();
|
||||
|
||||
// Generar la URL firmada
|
||||
PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(
|
||||
builder -> builder.getObjectRequest(getObjectRequest).signatureDuration(Duration.ofMinutes(TIEMPO_VIDA_MINUTOS_URL)) // Duración de la URL firmada
|
||||
PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(builder -> builder
|
||||
.getObjectRequest(getObjectRequest).signatureDuration(Duration.ofMinutes(TIEMPO_VIDA_MINUTOS_URL)) // Tiempo expiración URL firmada
|
||||
);
|
||||
|
||||
// Obtener la URL firmada
|
||||
@ -90,8 +80,8 @@ public class AppPrincipal {
|
||||
|
||||
// Cerrar el presigner
|
||||
presigner.close();
|
||||
|
||||
return urlObjetoS3;
|
||||
|
||||
return urlObjetoS3;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,21 +2,27 @@ package org.lapaloma.pfc.gestores;
|
||||
|
||||
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
|
||||
import software.amazon.awssdk.regions.Region;
|
||||
import software.amazon.awssdk.services.s3.S3Client;
|
||||
import software.amazon.awssdk.services.s3.presigner.S3Presigner;
|
||||
|
||||
public class GestorClientesServiciosAWS {
|
||||
public final static Region REGION_AWS = Region.US_EAST_1;
|
||||
private static final String PERFIL_CREDENCIALES_AWS = "default";
|
||||
public final static Region REGION_AWS = Region.US_EAST_1;
|
||||
|
||||
// Evita que pueda construirse un objeto de la clase.
|
||||
private GestorClientesServiciosAWS() {
|
||||
}
|
||||
|
||||
public static S3Client getClienteBucketS3() {
|
||||
S3Client clienteS3 = S3Client.builder()
|
||||
.credentialsProvider(ProfileCredentialsProvider.create())
|
||||
.region(REGION_AWS).build();
|
||||
return clienteS3;
|
||||
public static S3Presigner getClientePrefirmadorBucketS3() {
|
||||
|
||||
// Usar el perfil `learnerlab-profile` (el nombre del perfil en `~/.aws/credentials`)
|
||||
ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create(PERFIL_CREDENCIALES_AWS);
|
||||
|
||||
// Crear el cliente presigner de S3 con el perfil específico
|
||||
S3Presigner presigner = S3Presigner.builder().region(GestorClientesServiciosAWS.REGION_AWS)
|
||||
.credentialsProvider(credentialsProvider) // Usar el perfil especificado
|
||||
.build();
|
||||
|
||||
return presigner;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user