Upload files
To upload to S3 from a data object, specify the key
and the data
object to be uploaded.
1let dataString = "My Data"2let data = dataString.data(using: .utf8)!3let storageOperation = Amplify.Storage.uploadData(4 key: "ExampleKey",5 data: data,6 progressListener: { progress in7 print("Progress: \(progress)")8 }, resultListener: { event in9 switch event {10 case .success(let data):11 print("Completed: \(data)")12 case .failure(let storageError):13 print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")14 }15 }16)
When you have a file that you want to upload, you can specify the url to the file in the local
parameter.
1let dataString = "My Data"2let fileNameKey = "myFile.txt"3let filename = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]4 .appendingPathComponent(fileNameKey)5do {6 try dataString.write(to: filename, atomically: true, encoding: String.Encoding.utf8)7} catch {8 print("Failed to write to file \(error)")9}10
11let storageOperation = Amplify.Storage.uploadFile(12 key: fileNameKey,13 local: filename,14 progressListener: { progress in15 print("Progress: \(progress)")16 }, resultListener: { event in17 switch event {18 case let .success(data):19 print("Completed: \(data)")20 case let .failure(storageError):21 print("Failed: \(storageError.errorDescription). \(storageError.recoverySuggestion)")22 }23 }24)
Cancel, Pause, Resume
Calls to uploadData
or uploadFile
return a reference to the operation that is actually performing the upload.
To cancel the upload (for example, in response to the user pressing a Cancel button), you simply call cancel()
on the upload operation.
1func cancelUpload() {2 storageOperation.cancel()3}
You can also pause then resume the operation.
1storageOperation.pause()2storageOperation.resume()
MultiPart upload
The upload will automatically perform a S3 multipart upload for files larger than 5MB. For more information about S3's multipart upload, see Uploading and copying objects using multipart upload