Skip to content

Commit 0291092

Browse files
Update design doc with TransferManager Integration
1 parent c5e7b64 commit 0291092

File tree

2 files changed

+48
-0
lines changed

2 files changed

+48
-0
lines changed

docs/design/core/presignedURL-Get/DecisionLog.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,12 @@ The team has decided to implement functionality only for S3 async client and def
6060

6161
### Decision Addressed
6262
Initially considered separate discovery request (bytes=0-0) followed by download, but decided to follow AWS Transfer Manager SEP specification using Range: bytes=0-{partSizeInBytes-1} to download first part AND discover total object size simultaneously from Content-Range header response.
63+
64+
## Transfer Manager Integration Review: 08/19/2025
65+
**Attendees**: John Viegas, Zoe Wang, Dongie Agnir, Alex Woods, Bole Yi, Olivier Lepage Applin, Ran Vaknin, David Ho, Saranya Somepalli
66+
67+
### Decisions Addressed
68+
69+
1. **API Names**: Finalized `downloadWithPresignedUrl` and `downloadFileWithPresignedUrl` for Transfer Manager methods during Surface API Review.
70+
71+
2. **Pause/Resume Support**: Decided not to support pause/resume capability for presigned URL downloads, maintaining consistency with AWS SDK for Java v1 which also lacks this feature for presigned URLs.

docs/design/core/presignedURL-Get/Design.md

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,45 @@ public final class PresignedUrlDownloadRequest
118118
}
119119
```
120120

121+
## Transfer Manager Integration
122+
123+
The S3TransferManager extends support for presigned URL downloads, providing high-level benefits like progress tracking and multipart optimization while building on the existing AsyncPresignedUrlExtension infrastructure.
124+
125+
### New Transfer Manager APIs
126+
127+
```java
128+
// File-based presigned URL download
129+
FileDownload download = transferManager.downloadFileWithPresignedUrl(
130+
PresignedDownloadFileRequest.builder()
131+
.presignedUrlDownloadRequest(PresignedUrlDownloadRequest.builder()
132+
.presignedUrl(presignedUrl)
133+
.build())
134+
.destination(Paths.get("downloaded-file.txt"))
135+
.addTransferListener(LoggingTransferListener.create())
136+
.build());
137+
138+
// Generic download with custom response transformer
139+
Download<ResponseBytes<GetObjectResponse>> download = transferManager.downloadWithPresignedUrl(
140+
PresignedDownloadRequest.builder()
141+
.presignedUrlDownloadRequest(PresignedUrlDownloadRequest.builder()
142+
.presignedUrl(presignedUrl)
143+
.build())
144+
.responseTransformer(AsyncResponseTransformer.toBytes())
145+
.build());
146+
```
147+
148+
### Key Features
149+
150+
- **Progress Tracking**: Full TransferListener support with bytesTransferred callbacks
151+
- **Multipart Downloads**: Automatic multipart for large objects using HTTP Range headers
152+
- **Consistent API**: Same FileDownload/Download return types as regular transfers
153+
- **Error Handling**: Comprehensive validation of Content-Range headers and response integrity
154+
155+
### Limitations
156+
157+
- **No Pause/Resume**: Presigned URL downloads do not support pause/resume functionality due to URL expiration and authentication constraints
158+
- **S3CrtTransferManager**: Not supported due to signing conflicts with presigned URLs
159+
121160
## FAQ
122161

123162
### Why don't we implement presigned URL download/GET feature directly on the S3AsyncClient?

0 commit comments

Comments
 (0)