View a markdown version of this page

从以下地址迁移预签名 URL 下载 适用于 Java 的 AWS SDK v1 到 v2 - AWS SDK for Java 2.x

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从以下地址迁移预签名 URL 下载 适用于 Java 的 AWS SDK v1 到 v2

迁移您的预签名 URL 下载代码以使用异步处理并访问版本 2 中的扩展下载选项。本主题介绍如何从的版本 1.x (v1) 迁移到版本 2.x (v2)。 适用于 Java 的 AWS SDK有关 v2 预签名 URL 下载功能的信息,请参阅。与... 一起工作 Amazon S3 预签名 URL

High-level 改变

以下列表总结了 v1 和 v2 在预签名 URL 下载方面的主要区别:

  • P@@ ac kage: com.amazonaws.services.s3software.amazon.awssdk.services.s3

  • 客户端类AmazonS3(同步)→S3AsyncClient(异步)。

  • 架构:同步阻塞调用 → 使用异步调用CompletableFuture

  • Multipart:仅可通过转账管理器获得 → 可直接在客户端上使用multipartEnabled(true)

  • 传输管理器:仅限文件目标 → 文件、字节或自定义转换器。

依赖关系、包和类名的变化

下表显示了从 v1 到 v2 的依赖关系和类名的变化。

更改 v1 v2

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>
软件包名称 com.amazonaws.services.s3 software.amazon.awssdk.services.s3
类名 AmazonS3, TransferManager S3AsyncClient, S3TransferManager

1 Maven Central 网站上有最新版本2 Maven Central 网站上有最新版本

API 更改

S3 客户端下载

下表比较了 S3 客户端下载的 v1 和 v2 API 调用。

使用案例 v1 v2
创建客户端
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
S3AsyncClient s3AsyncClient = S3AsyncClient.create(); AsyncPresignedUrlExtension extension = s3AsyncClient.presignedUrlExtension();
生成预签名 URL
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();
创建下载请求
PresignedUrlDownloadRequest downloadRequest = new PresignedUrlDownloadRequest(presignedUrl);
PresignedUrlDownloadRequest downloadRequest = PresignedUrlDownloadRequest.builder() .presignedUrl(presignedUrl) .build();
下载直播
PresignedUrlDownloadResult result = s3Client.download(downloadRequest); InputStream content = result.getS3Object() .getObjectContent();
ResponseBytes<GetObjectResponse> bytes = extension.getObject(downloadRequest, AsyncResponseTransformer.toBytes()) .join();
下载到文件
s3Client.download(downloadRequest, new File("/tmp/file.bin"));
extension.getObject(downloadRequest, Paths.get("/tmp/file.bin")) .join();
使用范围下载
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();

转会管理器下载

下表比较了传输管理器下载的 v1 和 v2 API 调用。

使用案例 v1 v2
创建转接管理器
TransferManager tm = TransferManagerBuilder.standard().build();
S3TransferManager tm = S3TransferManager.create();
下载
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();

有关更多信息,请参阅 使用预签名 URL 下载

配置更改

S3 客户端

下表描述了从 v1 到 v2 的 S3 客户端配置更改。

设置 v1 v2
多部分配置 PresignedUrlDownloadConfig.withDownloadSizePerRequest(long) S3AsyncClient.builder().multipartConfiguration(c -> c.minimumPartSizeInBytes(...))
自定义标题 PresignedUrlDownloadRequest.putCustomRequestHeader(String, String) 不支持。仅在下载时If-Match可以设置Range和。

Transfer Manager

下表描述了从 v1 到 v2 的传输管理器配置更改。

设置 v1 v2
进度跟踪 PresignedUrlDownloadConfig.withS3progressListener(...) PresignedDownloadFileRequest.builder().addTransferListener(...)
重试时恢复 PresignedUrlDownloadConfig.withResumeOnRetry(true) 不支持
Pause/Resume 不支持 不支持
注意

S AWS CRT-based 3 客户端 (S3AsyncClient.crtBuilder()) 当前不支持预签名 URL 扩展名。使用 S3AsyncClient.builder()