Skip to content

Commit aef39fd

Browse files
authored
fix(storage): add metadata support to uploads (#3295)
* fix(storage): add metadata support * fix(storage): fix missing parameter build error * fix(storage): fix storage unit tests * fix(storage): add metadata support to multipart upload * fix(storage): add metadata support to multipart upload
1 parent dc6a46b commit aef39fd

13 files changed

+48
-13
lines changed

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/AWSS3StoragePlugin+AsyncClientBehavior.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ extension AWSS3StoragePlugin {
3535
let result = try await storageService.getPreSignedURL(
3636
serviceKey: serviceKey,
3737
signingOperation: .getObject,
38+
metadata: nil,
3839
accelerate: accelerate,
3940
expires: options.expires)
4041

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Dependency/AWSS3PreSignedURLBuilderAdapter.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class AWSS3PreSignedURLBuilderAdapter: AWSS3PreSignedURLBuilderBehavior {
3434
/// - Returns: Pre-Signed URL
3535
func getPreSignedURL(key: String,
3636
signingOperation: AWSS3SigningOperation,
37+
metadata: [String: String]? = nil,
3738
accelerate: Bool? = nil,
3839
expires: Int64? = nil) async throws -> URL {
3940
let expiresDate = Date(timeIntervalSinceNow: Double(expires ?? defaultExpiration))
@@ -47,7 +48,7 @@ class AWSS3PreSignedURLBuilderAdapter: AWSS3PreSignedURLBuilderBehavior {
4748
config: config,
4849
expiration: expiration)
4950
case .putObject:
50-
let input = PutObjectInput(bucket: bucket, key: key)
51+
let input = PutObjectInput(bucket: bucket, key: key, metadata: metadata)
5152
preSignedUrl = try await input.presignURL(
5253
config: config,
5354
expiration: expiration)

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Dependency/AWSS3PreSignedURLBuilderBehavior.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ protocol AWSS3PreSignedURLBuilderBehavior {
4141
/// - Tag: AWSS3PreSignedURLBuilderBehavior.getPreSignedURL
4242
func getPreSignedURL(key: String,
4343
signingOperation: AWSS3SigningOperation,
44+
metadata: [String: String]?,
4445
accelerate: Bool?,
4546
expires: Int64?) async throws -> URL
4647

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService+DownloadBehavior.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ extension AWSS3StorageService {
3030
do {
3131
let preSignedURL = try await preSignedURLBuilder.getPreSignedURL(key: serviceKey,
3232
signingOperation: .getObject,
33+
metadata: nil,
3334
accelerate: accelerate,
3435
expires: nil)
3536
startDownload(preSignedURL: preSignedURL, transferTask: transferTask)

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService+GetPreSignedURLBehavior.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,13 @@ extension AWSS3StorageService {
1414

1515
func getPreSignedURL(serviceKey: String,
1616
signingOperation: AWSS3SigningOperation,
17+
metadata: [String: String]?,
1718
accelerate: Bool?,
1819
expires: Int) async throws -> URL {
1920
return try await preSignedURLBuilder.getPreSignedURL(
2021
key: serviceKey,
2122
signingOperation: signingOperation,
23+
metadata: metadata,
2224
accelerate: nil,
2325
expires: Int64(expires)
2426
)

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService+MultiPartUploadBehavior.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@ extension AWSS3StorageService {
3232
let client = DefaultStorageMultipartUploadClient(serviceProxy: self,
3333
bucket: bucket,
3434
key: serviceKey,
35-
uploadFile: uploadFile)
35+
uploadFile: uploadFile,
36+
metadata: metadata)
3637
let multipartUploadSession = StorageMultipartUploadSession(client: client,
3738
bucket: bucket,
3839
key: serviceKey,

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageService+UploadBehavior.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ extension AWSS3StorageService {
3636
do {
3737
let preSignedURL = try await preSignedURLBuilder.getPreSignedURL(key: serviceKey,
3838
signingOperation: .putObject,
39+
metadata: metadata,
3940
accelerate: accelerate,
4041
expires: nil)
4142
startUpload(preSignedURL: preSignedURL,

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Service/Storage/AWSS3StorageServiceBehavior.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ protocol AWSS3StorageServiceBehavior {
4444

4545
func getPreSignedURL(serviceKey: String,
4646
signingOperation: AWSS3SigningOperation,
47+
metadata: [String: String]?,
4748
accelerate: Bool?,
4849
expires: Int) async throws -> URL
4950

AmplifyPlugins/Storage/Sources/AWSS3StoragePlugin/Support/Internal/StorageMultipartUploadClient.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,21 +42,25 @@ class DefaultStorageMultipartUploadClient: StorageMultipartUploadClient {
4242
let contentType: String?
4343
let requestHeaders: RequestHeaders?
4444
weak var session: StorageMultipartUploadSession?
45-
45+
let metadata: [String: String]?
46+
4647
init(serviceProxy: StorageServiceProxy,
4748
fileSystem: FileSystem = .default,
4849
bucket: String,
4950
key: String,
5051
uploadFile: UploadFile,
5152
contentType: String? = nil,
52-
requestHeaders: RequestHeaders? = nil) {
53+
requestHeaders: RequestHeaders? = nil,
54+
metadata: [String: String]? = nil
55+
) {
5356
self.serviceProxy = serviceProxy
5457
self.fileSystem = fileSystem
5558
self.bucket = bucket
5659
self.key = key
5760
self.uploadFile = uploadFile
5861
self.contentType = contentType
5962
self.requestHeaders = requestHeaders
63+
self.metadata = metadata
6064
}
6165

6266
func integrate(session: StorageMultipartUploadSession) {
@@ -135,6 +139,7 @@ class DefaultStorageMultipartUploadClient: StorageMultipartUploadClient {
135139
let preSignedURL = try await serviceProxy.preSignedURLBuilder.getPreSignedURL(
136140
key: self.key,
137141
signingOperation: operation,
142+
metadata: self.metadata,
138143
accelerate: nil,
139144
expires: nil
140145
)

AmplifyPlugins/Storage/Tests/AWSS3StoragePluginTests/AWSS3StoragePluginGetPresignedUrlTests.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ final class AWSS3StoragePluginGetPresignedUrlTests: XCTestCase {
6565
])
6666
let expectedServiceKey = "public/" + testKey
6767
XCTAssertEqual(storageService.interactions, [
68-
"getPreSignedURL(serviceKey:signingOperation:accelerate:expires:) \(expectedServiceKey) getObject 18000"
68+
"getPreSignedURL(serviceKey:signingOperation:metadata:accelerate:expires:) \(expectedServiceKey) getObject nil 18000"
6969
])
7070
}
7171

@@ -120,7 +120,7 @@ final class AWSS3StoragePluginGetPresignedUrlTests: XCTestCase {
120120

121121
let expectedServiceKey = StorageAccessLevel.protected.rawValue + "/" + testIdentityId + "/" + testKey
122122
XCTAssertEqual(storageService.interactions, [
123-
"getPreSignedURL(serviceKey:signingOperation:accelerate:expires:) \(expectedServiceKey) getObject \(expectedExpires)"
123+
"getPreSignedURL(serviceKey:signingOperation:metadata:accelerate:expires:) \(expectedServiceKey) getObject nil \(expectedExpires)"
124124
])
125125
}
126126

@@ -152,7 +152,7 @@ final class AWSS3StoragePluginGetPresignedUrlTests: XCTestCase {
152152

153153
let expectedServiceKey = StorageAccessLevel.protected.rawValue + "/" + testIdentityId + "/" + testKey
154154
XCTAssertEqual(storageService.interactions, [
155-
"getPreSignedURL(serviceKey:signingOperation:accelerate:expires:) \(expectedServiceKey) getObject \(expectedExpires)"
155+
"getPreSignedURL(serviceKey:signingOperation:metadata:accelerate:expires:) \(expectedServiceKey) getObject nil \(expectedExpires)"
156156
])
157157
}
158158

@@ -173,7 +173,7 @@ final class AWSS3StoragePluginGetPresignedUrlTests: XCTestCase {
173173
let expectedExpires = 18000
174174
let expectedServiceKey = StorageAccessLevel.protected.rawValue + "/" + testIdentityId + "/" + testKey
175175
XCTAssertEqual(storageService.interactions, [
176-
"getPreSignedURL(serviceKey:signingOperation:accelerate:expires:) \(expectedServiceKey) getObject \(expectedExpires)"
176+
"getPreSignedURL(serviceKey:signingOperation:metadata:accelerate:expires:) \(expectedServiceKey) getObject nil \(expectedExpires)"
177177
])
178178
}
179179

0 commit comments

Comments
 (0)