View a markdown version of this page

Migre las descargas de URL prefirmadas desde AWS SDK para Java v1 a v2 - AWS SDK for Java 2.x

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Migre las descargas de URL prefirmadas desde AWS SDK para Java v1 a v2

Migre su código de descarga URL prefirmado para utilizar el procesamiento asíncrono y acceder a opciones de descarga ampliadas en la versión 2. En este tema se muestra cómo migrar de la versión 1.x (v1) a la versión 2.x (v2) de. AWS SDK para Java Para obtener información sobre las capacidades de descarga de URL prefirmadas de la versión 2, consulte. Trabaja con Amazon S3 URL prefirmadas

High-level cambios

En la siguiente lista se resumen las principales diferencias entre la versión 1 y la versión 2 para las descargas de URL prefirmadas:

  • Paquete: com.amazonaws.services.s3software.amazon.awssdk.services.s3.

  • Clase de cliente: AmazonS3 (síncrono) → S3AsyncClient (asíncrono).

  • Arquitectura: Bloqueo sincrónico de llamadas → Llamadas asíncronas con. CompletableFuture

  • Multiparte: disponible solo a través de Transfer Manager → Disponible directamente en el cliente con. multipartEnabled(true)

  • Transfer Manager: solo destino del archivo → Archivo, bytes o transformador personalizado.

Cambios en las dependencias, los paquetes y los nombres de las clases

En la siguiente tabla se muestran los cambios de la dependencia y el nombre de la clase de la v1 a la v2.

Cambio v1   v2

dependencias Maven

<dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-bom</artifactId> <version>1.12.7971</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-s3</artifactId> </dependency> </dependencies>
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.48.02</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3</artifactId> </dependency> <!-- Optional: for Transfer Manager --> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3-transfer-manager</artifactId> </dependency> </dependencies>
Nombre del paquete com.amazonaws.services.s3 software.amazon.awssdk.services.s3
Nombres de clase AmazonS3, TransferManager S3AsyncClient, S3TransferManager

1 Última versión en el sitio web de Maven Central. 2 Última versión en el sitio web de Maven Central.

Cambios en la API

Descargas de clientes S3

En la siguiente tabla se comparan las llamadas a las API de las versiones 1 y 2 para las descargas de clientes de S3.

Caso de uso v1   v2
Cree el cliente
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
S3AsyncClient s3AsyncClient = S3AsyncClient.create(); AsyncPresignedUrlExtension extension = s3AsyncClient.presignedUrlExtension();
Genera una URL prefirmada
Date expiration = new Date( System.currentTimeMillis() + 600_000); URL presignedUrl = s3Client.generatePresignedUrl( new GeneratePresignedUrlRequest( "my-bucket", "my-key") .withMethod(HttpMethod.GET) .withExpiration(expiration));
S3Presigner presigner = S3Presigner.create(); PresignedGetObjectRequest presigned = presigner.presignGetObject(r -> r .getObjectRequest(req -> req .bucket("my-bucket").key("my-key")) .signatureDuration(Duration.ofMinutes(10))); URL presignedUrl = presigned.url(); presigner.close();
Crea la solicitud de descarga
PresignedUrlDownloadRequest downloadRequest = new PresignedUrlDownloadRequest(presignedUrl);
PresignedUrlDownloadRequest downloadRequest = PresignedUrlDownloadRequest.builder() .presignedUrl(presignedUrl) .build();
Descarga para transmitir
PresignedUrlDownloadResult result = s3Client.download(downloadRequest); InputStream content = result.getS3Object() .getObjectContent();
ResponseBytes<GetObjectResponse> bytes = extension.getObject(downloadRequest, AsyncResponseTransformer.toBytes()) .join();
Descargar al archivo
s3Client.download(downloadRequest, new File("/tmp/file.bin"));
extension.getObject(downloadRequest, Paths.get("/tmp/file.bin")) .join();
Descarga con rango
PresignedUrlDownloadRequest rangeRequest = new PresignedUrlDownloadRequest(presignedUrl); rangeRequest.setRange(0, 1023); s3Client.download(rangeRequest);
PresignedUrlDownloadRequest rangeRequest = PresignedUrlDownloadRequest.builder() .presignedUrl(presignedUrl) .range("bytes=0-1023") .build(); extension.getObject(rangeRequest, Paths.get("/tmp/partial.bin")) .join();

Descargas de Transfer Manager

En la siguiente tabla, se comparan las llamadas a las API de las versiones 1 y 2 para las descargas de Transfer Manager.

Caso de uso v1   v2
Crea el Gestor de transferencias
TransferManager tm = TransferManagerBuilder.standard().build();
S3TransferManager tm = S3TransferManager.create();
Download
PresignedUrlDownload download = tm.download( new PresignedUrlDownloadRequest(presignedUrl), new File("/tmp/file.bin")); download.waitForCompletion();
PresignedFileDownload download = tm.downloadFileWithPresignedUrl( PresignedDownloadFileRequest.builder() .presignedUrlDownloadRequest( downloadRequest) .destination(Paths.get("/tmp/file.bin")) .addTransferListener( LoggingTransferListener.create()) .build()); download.completionFuture().join();

Para obtener más información, consulte Descarga mediante una URL prefirmada.

Cambios de configuración

cliente S3

La siguiente tabla describe los cambios en la configuración del cliente S3 de la versión 1 a la versión 2.

Opción v1   v2
Configuración multiparte PresignedUrlDownloadConfig.withDownloadSizePerRequest(long) S3AsyncClient.builder().multipartConfiguration(c -> c.minimumPartSizeInBytes(...))
Cabeceras personalizadas PresignedUrlDownloadRequest.putCustomRequestHeader(String, String) No admitido. Solo Range y se If-Match pueden configurar en el momento de la descarga.

Transfer Manager

En la siguiente tabla se describen los cambios de configuración de Transfer Manager de la versión 1 a la versión 2.

Opción v1   v2
Seguimiento del progreso PresignedUrlDownloadConfig.withS3progressListener(...) PresignedDownloadFileRequest.builder().addTransferListener(...)
Reanude al volver a intentarlo PresignedUrlDownloadConfig.withResumeOnRetry(true) No admitido
Pause/Resume No admitido No admitido
nota

El cliente AWS CRT-based S3 (S3AsyncClient.crtBuilder()) no admite actualmente la extensión de URL prefirmada. Utilice S3AsyncClient.builder().