Download files
There are three ways of getting data that was previously uploaded:
Download data
You can download to in-memory buffer Data object with Amplify.Storage.downloadData
:
1let downloadTask = Amplify.Storage.downloadData(key: "ExampleKey")2Task {3 for await progress in await downloadTask.progress {4 print("Progress: \(progress)")5 }6}7let data = try await downloadTask.value8print("Completed: \(data)")
Download to file
You can download to a file URL with Amplify.Storage.downloadFile
:
1let downloadToFileName = FileManager.default.urls(2 for: .documentDirectory,3 in: .userDomainMask4)[0].appendingPathComponent("myFile.txt")5
6let downloadTask = Amplify.Storage.downloadFile(7 key: "myKey",8 local: downloadToFileName,9 options: nil10)11Task {12 for await progress in await downloadTask.progress {13 print("Progress: \(progress)")14 }15}16try await downloadTask.value17print("Completed")
Generate a download URL
You can also retrieve a URL for the object in storage:
1let url = try await Amplify.Storage.getURL(key: "ExampleKey")2print("Completed: \(url)")
When creating a downloadable URL, you can choose to check if the file exists by setting validateObjectExistence
to
true
in AWSStorageGetURLOptions
. If the file is inaccessible or does not exist, a StorageError
is thrown.
This allows you to check if an object exists during generating the presigned URL, which you can then use to download
that object.
1let url = try await Amplify.Storage.getURL(2 key: "ExampleKey",3 options: .init(4 pluginOptions: AWSStorageGetURLOptions(5 validateObjectExistence: true6 )7 )8)
Cancel, Pause, Resume
Calls to downloadData
or downloadFile
return a reference to the task that is actually performing the download.
To cancel the download (for example, in response to the user pressing a Cancel button), you simply call cancel()
on the download task.
1func cancelDownload() {2 downloadTask.cancel()3}
You can also pause and then resume the task.
1downloadTask.pause()2downloadTask.resume()