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 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.GetObjectRequest;
|
||||||
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
|
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.S3Presigner;
|
||||||
import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest;
|
import software.amazon.awssdk.services.s3.presigner.model.PresignedGetObjectRequest;
|
||||||
|
import software.amazon.awssdk.services.s3.presigner.model.PutObjectPresignRequest;
|
||||||
|
|
||||||
public class AppPrincipal {
|
public class AppPrincipal {
|
||||||
private final static String NOMBRE_BUCKET_EN_S3 = "s3-obj-proyecto1";
|
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) {
|
public static void main(String[] args) {
|
||||||
// TODO Auto-generated method stub
|
// TODO Auto-generated method stub
|
||||||
@ -30,58 +27,51 @@ public class AppPrincipal {
|
|||||||
File documentoEjemplo = new File("fichero/subida_archivos_a_s3.jpg");
|
File documentoEjemplo = new File("fichero/subida_archivos_a_s3.jpg");
|
||||||
String claveDocumento = idProyecto + "/" + numeroHito + "/" + documentoEjemplo.getName();
|
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);
|
String urlDocumentoConsultado = app.consultarDocumentoEnS3(claveDocumento);
|
||||||
System.out.println("URL del objeto en S3: " + url);
|
System.out.println("URL del objeto en S3 para hacer un 'GET': " + urlDocumentoConsultado);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String almacenarDocumentoEnS3(String clave, File documento) {
|
||||||
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) {
|
|
||||||
String urlObjetoS3 = null;
|
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`)
|
// Solicitud para subir el archivo (método PUT)
|
||||||
ProfileCredentialsProvider credentialsProvider = ProfileCredentialsProvider.create("default");
|
PutObjectRequest putObjectRequest = PutObjectRequest.builder().bucket(NOMBRE_BUCKET_EN_S3).key(clave).build();
|
||||||
|
|
||||||
// Crear el cliente presigner de S3 con el perfil específico
|
// Crear el cliente presigner de S3
|
||||||
S3Presigner presigner = S3Presigner.builder().region(GestorClientesServiciosAWS.REGION_AWS)
|
S3Presigner presigner = GestorClientesServiciosAWS.getClientePrefirmadorBucketS3();
|
||||||
.credentialsProvider(credentialsProvider) // Usar el perfil especificado
|
|
||||||
|
// Generar la URL firmada
|
||||||
|
PutObjectPresignRequest presignRequest = PutObjectPresignRequest.builder()
|
||||||
|
.signatureDuration(Duration.ofMinutes(TIEMPO_VIDA_MINUTOS_URL)) // Tiempo expiración URL firmada
|
||||||
|
.putObjectRequest(putObjectRequest)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
// Crear la solicitud de obtención de objeto
|
// 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)
|
GetObjectRequest getObjectRequest = GetObjectRequest.builder().bucket(NOMBRE_BUCKET_EN_S3).key(claveDocumento)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
|
// Crear el cliente presigner de S3
|
||||||
|
S3Presigner presigner = GestorClientesServiciosAWS.getClientePrefirmadorBucketS3();
|
||||||
|
|
||||||
// Generar la URL firmada
|
// Generar la URL firmada
|
||||||
PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(
|
PresignedGetObjectRequest presignedRequest = presigner.presignGetObject(builder -> builder
|
||||||
builder -> builder.getObjectRequest(getObjectRequest).signatureDuration(Duration.ofMinutes(TIEMPO_VIDA_MINUTOS_URL)) // Duración de la URL firmada
|
.getObjectRequest(getObjectRequest).signatureDuration(Duration.ofMinutes(TIEMPO_VIDA_MINUTOS_URL)) // Tiempo expiración URL firmada
|
||||||
);
|
);
|
||||||
|
|
||||||
// Obtener la URL firmada
|
// Obtener la URL firmada
|
||||||
|
|||||||
@ -2,21 +2,27 @@ package org.lapaloma.pfc.gestores;
|
|||||||
|
|
||||||
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
|
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
|
||||||
import software.amazon.awssdk.regions.Region;
|
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 class GestorClientesServiciosAWS {
|
||||||
|
private static final String PERFIL_CREDENCIALES_AWS = "default";
|
||||||
public final static Region REGION_AWS = Region.US_EAST_1;
|
public final static Region REGION_AWS = Region.US_EAST_1;
|
||||||
|
|
||||||
// Evita que pueda construirse un objeto de la clase.
|
// Evita que pueda construirse un objeto de la clase.
|
||||||
private GestorClientesServiciosAWS() {
|
private GestorClientesServiciosAWS() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static S3Client getClienteBucketS3() {
|
public static S3Presigner getClientePrefirmadorBucketS3() {
|
||||||
S3Client clienteS3 = S3Client.builder()
|
|
||||||
.credentialsProvider(ProfileCredentialsProvider.create())
|
|
||||||
.region(REGION_AWS).build();
|
|
||||||
return clienteS3;
|
|
||||||
|
|
||||||
|
// 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