Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.

Page updated May 1, 2024

Download files

The latest version of Amplify Storage supports specifying S3 objects as a paths.
We recommend using path instead of key to specify S3 objects.

Note: key parameter is deprecated and may be removed in next major version.

Download to file

With StoragePath

1Amplify.Storage.downloadFile(
2 StoragePath.fromString("public/example"),
3 new File(getApplicationContext().getFilesDir() + "/download.txt"),
4 result -> Log.i("MyAmplifyApp", "Successfully downloaded: " + result.getFile().getName()),
5 error -> Log.e("MyAmplifyApp", "Download Failure", error)
6);
1val file = File("${applicationContext.filesDir}/download.txt")
2Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file,
3 { Log.i("MyAmplifyApp", "Successfully downloaded: ${it.file.name}") },
4 { Log.e("MyAmplifyApp", "Download Failure", it) }
5)
1try {
2 val file = File("${applicationContext.filesDir}/download.txt")
3 val download = Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file)
4 try {
5 val fileName = download.result().file.name
6 Log.i("MyAmplifyApp", "Successfully downloaded: $fileName")
7 } catch (error: StorageException) {
8 Log.e("MyAmplifyApp", "Download Failure", error)
9 }
10}
1RxProgressAwareSingleOperation<StorageDownloadFileResult> download =
2 RxAmplify.Storage.downloadFile(
3 StoragePath.fromString("public/example"),
4 new File(getApplicationContext().getFilesDir() + "/download.txt"
5 );
6
7download
8 .observeResult()
9 .subscribe(
10 result -> Log.i("MyAmplifyApp", "Successfully downloaded: " + result.getFile().getName()),
11 error -> Log.e("MyAmplifyApp", "Download Failure", error)
12 );

With Key (Deprecated)

1Amplify.Storage.downloadFile(
2 "ExampleKey",
3 new File(getApplicationContext().getFilesDir() + "/download.txt"),
4 result -> Log.i("MyAmplifyApp", "Successfully downloaded: " + result.getFile().getName()),
5 error -> Log.e("MyAmplifyApp", "Download Failure", error)
6);
1val file = File("${applicationContext.filesDir}/download.txt")
2Amplify.Storage.downloadFile("ExampleKey", file,
3 { Log.i("MyAmplifyApp", "Successfully downloaded: ${it.file.name}") },
4 { Log.e("MyAmplifyApp", "Download Failure", it) }
5)
1try {
2 val file = File("${applicationContext.filesDir}/download.txt")
3 val download = Amplify.Storage.downloadFile("ExampleKey", file)
4 try {
5 val fileName = download.result().file.name
6 Log.i("MyAmplifyApp", "Successfully downloaded: $fileName")
7 } catch (error: StorageException) {
8 Log.e("MyAmplifyApp", "Download Failure", error)
9 }
10}
1RxProgressAwareSingleOperation<StorageDownloadFileResult> download =
2 RxAmplify.Storage.downloadFile(
3 "ExampleKey",
4 new File(getApplicationContext().getFilesDir() + "/download.txt"
5 );
6
7download
8 .observeResult()
9 .subscribe(
10 result -> Log.i("MyAmplifyApp", "Successfully downloaded: " + result.getFile().getName()),
11 error -> Log.e("MyAmplifyApp", "Download Failure", error)
12 );

Track download progress

To track progress of the download, use the downloadFile API that includes a progress listener callback.

With StoragePath

1Amplify.Storage.downloadFile(
2 StoragePath.fromString("public/example"),
3 new File(getApplicationContext().getFilesDir() + "/download.txt"),
4 StorageDownloadFileOptions.defaultInstance(),
5 progress -> Log.i("MyAmplifyApp", "Fraction completed: " + progress.getFractionCompleted()),
6 result -> Log.i("MyAmplifyApp", "Successfully downloaded: " + result.getFile().getName()),
7 error -> Log.e("MyAmplifyApp", "Download Failure", error)
8);
1val file = File("${applicationContext.filesDir}/download.txt")
2val options = StorageDownloadFileOptions.defaultInstance()
3Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file, options,
4 { Log.i("MyAmplifyApp", "Fraction completed: ${it.fractionCompleted}") },
5 { Log.i("MyAmplifyApp", "Successfully downloaded: ${it.file.name}") },
6 { Log.e("MyAmplifyApp", "Download Failure", it) }
7)
1val file = File("${applicationContext.filesDir}/download.txt")
2val options = StorageDownloadFileOptions.defaultInstance()
3val download = Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file, options)
4val progressJob = activityScope.async {
5 download.progress().collect { progress ->
6 Log.i("MyAmplifyApp", "Fraction completed: ${progress.fractionCompleted}")
7 }
8}
9try {
10 val fileName = download.result().file.name
11 Log.i("MyAmplifyApp", "Successfully downloaded: $fileName")
12} catch (error: StorageException) {
13 Log.e("MyAmplifyApp", "Download Failure", error)
14}
15progressJob.cancel()
1RxProgressAwareSingleOperation<StorageDownloadFileResult> download =
2 RxAmplify.Storage.downloadFile(StoragePath.fromString("public/example"), localFile);
3
4download
5 .observeProgress()
6 .subscribe(
7 progress -> Log.i("MyAmplifyApp", progress.getFractionCompleted())
8 );

With Key (Deprecated)

1Amplify.Storage.downloadFile(
2 "ExampleKey",
3 new File(getApplicationContext().getFilesDir() + "/download.txt"),
4 StorageDownloadFileOptions.defaultInstance(),
5 progress -> Log.i("MyAmplifyApp", "Fraction completed: " + progress.getFractionCompleted()),
6 result -> Log.i("MyAmplifyApp", "Successfully downloaded: " + result.getFile().getName()),
7 error -> Log.e("MyAmplifyApp", "Download Failure", error)
8);
1val file = File("${applicationContext.filesDir}/download.txt")
2val options = StorageDownloadFileOptions.defaultInstance()
3Amplify.Storage.downloadFile("ExampleKey", file, options,
4 { Log.i("MyAmplifyApp", "Fraction completed: ${it.fractionCompleted}") },
5 { Log.i("MyAmplifyApp", "Successfully downloaded: ${it.file.name}") },
6 { Log.e("MyAmplifyApp", "Download Failure", it) }
7)
1val file = File("${applicationContext.filesDir}/download.txt")
2val options = StorageDownloadFileOptions.defaultInstance()
3val download = Amplify.Storage.downloadFile("ExampleKey", file, options)
4val progressJob = activityScope.async {
5 download.progress().collect { progress ->
6 Log.i("MyAmplifyApp", "Fraction completed: ${progress.fractionCompleted}")
7 }
8}
9try {
10 val fileName = download.result().file.name
11 Log.i("MyAmplifyApp", "Successfully downloaded: $fileName")
12} catch (error: StorageException) {
13 Log.e("MyAmplifyApp", "Download Failure", error)
14}
15progressJob.cancel()
1RxProgressAwareSingleOperation<StorageDownloadFileResult> download =
2 RxAmplify.Storage.downloadFile(remoteKey, localFile);
3
4download
5 .observeProgress()
6 .subscribe(
7 progress -> Log.i("MyAmplifyApp", progress.getFractionCompleted())
8 );

Generate a download URL

You can also retrieve a URL for the object in storage:

With StoragePath

1Amplify.Storage.getUrl(
2 StoragePath.fromString("public/example"),
3 result -> Log.i("MyAmplifyApp", "Successfully generated: " + result.getUrl()),
4 error -> Log.e("MyAmplifyApp", "URL generation failure", error)
5);
1Amplify.Storage.getUrl(
2 StoragePath.fromString("public/example"),
3 { Log.i("MyAmplifyApp", "Successfully generated: ${it.url}") },
4 { Log.e("MyAmplifyApp", "URL generation failure", it) }
5)
1try {
2 val url = Amplify.Storage.getUrl(StoragePath.fromString("public/example")).url
3 Log.i("MyAmplifyApp", "Successfully generated: $url")
4} catch (error: StorageException) {
5 Log.e("MyAmplifyApp", "URL generation failure", error)
6}
1RxAmplify.Storage.getUrl(StoragePath.fromString("public/example")).subscribe(
2 result -> Log.i("MyAmplifyApp", "Successfully generated: " + result.getUrl()),
3 error -> Log.e("MyAmplifyApp", "URL generation failure", error)
4);

With Key (Deprecated)

1Amplify.Storage.getUrl(
2 "ExampleKey",
3 result -> Log.i("MyAmplifyApp", "Successfully generated: " + result.getUrl()),
4 error -> Log.e("MyAmplifyApp", "URL generation failure", error)
5);
1Amplify.Storage.getUrl(
2 "ExampleKey",
3 { Log.i("MyAmplifyApp", "Successfully generated: ${it.url}") },
4 { Log.e("MyAmplifyApp", "URL generation failure", it) }
5)
1try {
2 val url = Amplify.Storage.getUrl("ExampleKey").url
3 Log.i("MyAmplifyApp", "Successfully generated: $url")
4} catch (error: StorageException) {
5 Log.e("MyAmplifyApp", "URL generation failure", error)
6}
1RxAmplify.Storage.getUrl("ExampleKey").subscribe(
2 result -> Log.i("MyAmplifyApp", "Successfully generated: " + result.getUrl()),
3 error -> Log.e("MyAmplifyApp", "URL generation failure", error)
4);