

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

# 从以下地址迁移预签名 URL 下载 适用于 Java 的 AWS SDK v1 到 v2
<a name="migration-s3-presign-download"></a>

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

## High-level 改变
<a name="migration-s3-presign-high-level"></a>

以下列表总结了 v1 和 v2 在预签名 URL 下载方面的主要区别：
+ P@@ **ac** kage: `com.amazonaws.services.s3` → `software.amazon.awssdk.services.s3`。
+ **客户端类**：`AmazonS3`（同步）→`S3AsyncClient`（异步）。
+ **架构**：同步阻塞调用 → 使用异步调用`CompletableFuture`。
+ **Multipart**：仅可通过转账管理器获得 → 可直接在客户端上使用`multipartEnabled(true)`。
+ **传输管理器**：仅限文件目标 → 文件、字节或自定义转换器。

## 依赖关系、包和类名的变化
<a name="migration-s3-presign-deps"></a>

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


| 更改 | v1 |  v2 | 
| --- | --- | --- | 
| Maven 依赖项 |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>com.amazonaws</groupId><br />            <artifactId>aws-java-sdk-bom</artifactId><br />            <version>{{1.12.7971}}</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>com.amazonaws</groupId><br />        <artifactId>aws-java-sdk-s3</artifactId><br />    </dependency><br /></dependencies></pre>  |  <pre><dependencyManagement><br />    <dependencies><br />        <dependency><br />            <groupId>software.amazon.awssdk</groupId><br />            <artifactId>bom</artifactId><br />            <version>{{2.48.02}}</version><br />            <type>pom</type><br />            <scope>import</scope><br />        </dependency><br />    </dependencies><br /></dependencyManagement><br /><dependencies><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>s3</artifactId><br />    </dependency><br />    <!-- Optional: for Transfer Manager --><br />    <dependency><br />        <groupId>software.amazon.awssdk</groupId><br />        <artifactId>s3-transfer-manager</artifactId><br />    </dependency><br /></dependencies></pre>  | 
| 软件包名称 | com.amazonaws.services.s3 | software.amazon.awssdk.services.s3 | 
| 类名 | AmazonS3, TransferManager | S3AsyncClient, S3TransferManager | 

1 Maven Central 网站上有[最新版本](https://central.sonatype.com/artifact/com.amazonaws/aws-java-sdk-bom)。 2 Maven Central 网站上有[最新版本](https://central.sonatype.com/artifact/software.amazon.awssdk/bom)。

## API 更改
<a name="migration-s3-presign-api-changes"></a>

### S3 客户端下载
<a name="migration-s3-presign-api-s3client"></a>

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


| 使用案例 | v1 |  v2 | 
| --- | --- | --- | 
| 创建客户端 |  <pre>AmazonS3 s3Client = <br />        AmazonS3ClientBuilder.defaultClient();</pre>  |  <pre>S3AsyncClient s3AsyncClient = <br />        S3AsyncClient.create();<br />AsyncPresignedUrlExtension extension = <br />        s3AsyncClient.presignedUrlExtension();</pre>  | 
| 生成预签名 URL |  <pre>Date expiration = new Date(<br />        System.currentTimeMillis() + 600_000);<br />URL presignedUrl = s3Client.generatePresignedUrl(<br />        new GeneratePresignedUrlRequest(<br />            "my-bucket", "my-key")<br />            .withMethod(HttpMethod.GET)<br />            .withExpiration(expiration));</pre>  |  <pre>S3Presigner presigner = S3Presigner.create();<br />PresignedGetObjectRequest presigned = <br />        presigner.presignGetObject(r -> r<br />            .getObjectRequest(req -> req<br />                .bucket("my-bucket").key("my-key"))<br />            .signatureDuration(Duration.ofMinutes(10)));<br />URL presignedUrl = presigned.url();<br />presigner.close();</pre>  | 
| 创建下载请求 |  <pre>PresignedUrlDownloadRequest downloadRequest = <br />        new PresignedUrlDownloadRequest(presignedUrl);</pre>  |  <pre>PresignedUrlDownloadRequest downloadRequest = <br />        PresignedUrlDownloadRequest.builder()<br />            .presignedUrl(presignedUrl)<br />            .build();</pre>  | 
| 下载直播 |  <pre>PresignedUrlDownloadResult result = <br />        s3Client.download(downloadRequest);<br />InputStream content = result.getS3Object()<br />        .getObjectContent();</pre>  |  <pre>ResponseBytes<GetObjectResponse> bytes = <br />        extension.getObject(downloadRequest,<br />            AsyncResponseTransformer.toBytes())<br />        .join();</pre>  | 
| 下载到文件 |  <pre>s3Client.download(downloadRequest,<br />        new File("/tmp/file.bin"));</pre>  |  <pre>extension.getObject(downloadRequest,<br />            Paths.get("/tmp/file.bin"))<br />        .join();</pre>  | 
| 使用范围下载 |  <pre>PresignedUrlDownloadRequest rangeRequest = <br />        new PresignedUrlDownloadRequest(presignedUrl);<br />rangeRequest.setRange(0, 1023);<br />s3Client.download(rangeRequest);</pre>  |  <pre>PresignedUrlDownloadRequest rangeRequest = <br />        PresignedUrlDownloadRequest.builder()<br />            .presignedUrl(presignedUrl)<br />            .range("bytes=0-1023")<br />            .build();<br />extension.getObject(rangeRequest,<br />            Paths.get("/tmp/partial.bin"))<br />        .join();</pre>  | 

### 转会管理器下载
<a name="migration-s3-presign-api-tm"></a>

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


| 使用案例 | v1 |  v2 | 
| --- | --- | --- | 
| 创建转接管理器 |  <pre>TransferManager tm = <br />        TransferManagerBuilder.standard().build();</pre>  |  <pre>S3TransferManager tm = <br />        S3TransferManager.create();</pre>  | 
| 下载 |  <pre>PresignedUrlDownload download = tm.download(<br />        new PresignedUrlDownloadRequest(presignedUrl),<br />        new File("/tmp/file.bin"));<br />download.waitForCompletion();</pre>  |  <pre>PresignedFileDownload download = <br />        tm.downloadFileWithPresignedUrl(<br />            PresignedDownloadFileRequest.builder()<br />                .presignedUrlDownloadRequest(<br />                    downloadRequest)<br />                .destination(Paths.get("/tmp/file.bin"))<br />                .addTransferListener(<br />                    LoggingTransferListener.create())<br />                .build());<br />download.completionFuture().join();</pre>  | 

有关更多信息，请参阅 [使用预签名 URL 下载](transfer-manager.md#transfer-manager-presigned-url-download)。

## 配置更改
<a name="migration-s3-presign-config"></a>

### S3 客户端
<a name="migration-s3-presign-config-s3"></a>

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


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

### Transfer Manager
<a name="migration-s3-presign-config-tm"></a>

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


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

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