Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.
Gen1 DocsLegacy

Page updated Apr 22, 2026

ファイルのダウンロード

アプリ内の体験をさらにカスタマイズするには、Amplify Library for StorageからgetUrlまたはdownloadData APIを使用できます。

注記: ストレージAPIの転送高速化を有効にする方法については、転送高速化ドキュメントを参照してください。

URLからファイルを取得またはダウンロードする

getUrl APIを使用すると、デフォルトで900秒または15分間有効な署名付きURLを取得できます。このURLを使用して、ユーザーがクリックするためのダウンロードリンクを作成できます。expiresAtプロパティはURLが期限切れになる時間を表すDateオブジェクトです。

Amplify.Storage.getUrl(
StoragePath.fromString("public/example"),
result -> Log.i("MyAmplifyApp", "正常に生成されました: " + result.getUrl()),
error -> Log.e("MyAmplifyApp", "URL生成失敗", error)
);
Amplify.Storage.getUrl(
StoragePath.fromString("public/example"),
{ Log.i("MyAmplifyApp", "正常に生成されました: ${it.url}") },
{ Log.e("MyAmplifyApp", "URL生成失敗", it) }
)
try {
val url = Amplify.Storage.getUrl(StoragePath.fromString("public/example")).url
Log.i("MyAmplifyApp", "正常に生成されました: $url")
} catch (error: StorageException) {
Log.e("MyAmplifyApp", "URL生成失敗", error)
}
RxAmplify.Storage.getUrl(StoragePath.fromString("public/example")).subscribe(
result -> Log.i("MyAmplifyApp", "正常に生成されました: " + result.getUrl()),
error -> Log.e("MyAmplifyApp", "URL生成失敗", error)
);

ファイルの存在を確認

ダウンロード可能なURLを作成する場合、AWSS3StorageGetPresignedUrlOptionsvalidateObjectExistencetrueに設定することで、ファイルが存在するかどうかを確認することができます。ファイルにアクセスできないか存在しない場合、StorageExceptionがスローされます。これにより、署名付きURLを生成するときにオブジェクトが存在するかどうかをチェックでき、その後、そのオブジェクトをダウンロードするために使用できます。

AWSS3StorageGetPresignedUrlOptions options = AWSS3StorageGetPresignedUrlOptions
.builder()
.setValidateObjectExistence(true)
.build();
Amplify.Storage.getUrl(
StoragePath.fromString("public/example"),
options,
result -> Log.i("MyAmplifyApp", "正常に生成されました: " + result.getUrl()),
error -> Log.e("MyAmplifyApp", "URL生成失敗", error)
);
val options = AWSS3StorageGetPresignedUrlOptions
.builder()
.setValidateObjectExistence(true)
.build()
Amplify.Storage.getUrl(
StoragePath.fromString("public/example"),
options,
{ Log.i("MyAmplifyApp", "正常に生成されました: ${it.url}") },
{ Log.e("MyAmplifyApp", "URL生成失敗", it) }
)
try {
val options = AWSS3StorageGetPresignedUrlOptions
.builder()
.setValidateObjectExistence(true)
.build()
val url = Amplify.Storage.getUrl(StoragePath.fromString("public/example"), options).url
Log.i("MyAmplifyApp", "正常に生成されました: $url")
} catch (error: StorageException) {
Log.e("MyAmplifyApp", "URL生成失敗", error)
}
AWSS3StorageGetPresignedUrlOptions options = AWSS3StorageGetPresignedUrlOptions
.builder()
.setValidateObjectExistence(true)
.build();
RxAmplify.Storage.getUrl(StoragePath.fromString("public/example"), options).subscribe(
result -> Log.i("MyAmplifyApp", "正常に生成されました: " + result.getUrl()),
error -> Log.e("MyAmplifyApp", "URL生成失敗", error)
);

すべてのgetURLオプション

オプションタイプ説明
bucketStorageBucketオブジェクトが保存されているバケット。
expiresIntegerURLが期限切れになるまでの秒数。
useAccelerateEndpointBooleanアクセラレートモードの使用を構成するフラグ。
validateObjectExistenceBooleanファイルが存在するかどうかをチェックするフラグ。

ファイルへのダウンロード

downloadFile APIを使用してファイルをクライアント上にローカルにダウンロードします。

注記: 既存のファイルを上書きするファイルをダウンロードする場合、アプリに適切な書き込み権限があることを確認して、それを上書きしてください。別のアプリが既に寄与しているファイルに書き込もうとしている場合、ユーザーの同意をリクエストする必要があります(こちらで説明)。

詳細は、Android の スコープ付きストレージに関する開発者ドキュメントを参照してください。

Amplify は既存のファイルを変更できない場合、StorageExceptionをスローします。

Amplify.Storage.downloadFile(
StoragePath.fromString("public/example"),
new File(getApplicationContext().getFilesDir() + "/download.txt"),
result -> Log.i("MyAmplifyApp", "正常にダウンロードされました: " + result.getFile().getName()),
error -> Log.e("MyAmplifyApp", "ダウンロード失敗", error)
);
val file = File("${applicationContext.filesDir}/download.txt")
Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file,
{ Log.i("MyAmplifyApp", "正常にダウンロードされました: ${it.file.name}") },
{ Log.e("MyAmplifyApp", "ダウンロード失敗", it) }
)
try {
val file = File("${applicationContext.filesDir}/download.txt")
val download = Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file)
try {
val fileName = download.result().file.name
Log.i("MyAmplifyApp", "正常にダウンロードされました: $fileName")
} catch (error: StorageException) {
Log.e("MyAmplifyApp", "ダウンロード失敗", error)
}
}
RxProgressAwareSingleOperation<StorageDownloadFileResult> download =
RxAmplify.Storage.downloadFile(
StoragePath.fromString("public/example"),
new File(getApplicationContext().getFilesDir() + "/download.txt")
);
download
.observeResult()
.subscribe(
result -> Log.i("MyAmplifyApp", "正常にダウンロードされました: " + result.getFile().getName()),
error -> Log.e("MyAmplifyApp", "ダウンロード失敗", error)
);

指定されたバケットからダウンロード

bucketオプションを指定して、特定のバケットにダウンロード操作を実行することもできます。Amplify Backendでアサインされたターゲットバケットのアサイン名を表す文字列を渡すことができます。

StorageBucket secondBucket = StorageBucket.fromOutputs("secondBucket");
StorageDownloadFileOptions options = StorageDownloadFileOptions.builder().bucket(secondBucket).build();
Amplify.Storage.downloadFile(
StoragePath.fromString("public/example"),
new File(getApplicationContext().getFilesDir() + "/download.txt"),
options,
result -> Log.i("MyAmplifyApp", "正常にダウンロードされました: " + result.getFile().getName()),
error -> Log.e("MyAmplifyApp", "ダウンロード失敗", error)
);
val secondBucket = StorageBucket.fromOutputs("secondBucket")
val options = StorageDownloadFileOptions.builder().bucket(secondBucket).build()
val file = File("${applicationContext.filesDir}/download.txt")
Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file, option,
{ Log.i("MyAmplifyApp", "正常にダウンロードされました: ${it.file.name}") },
{ Log.e("MyAmplifyApp", "ダウンロード失敗", it) }
)
val secondBucket = StorageBucket.fromOutputs("secondBucket")
val options = StorageDownloadFileOptions.builder().bucket(secondBucket).build()
val file = File("${applicationContext.filesDir}/download.txt")
val download = Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file, options)
try {
val fileName = download.result().file.name
Log.i("MyAmplifyApp", "正常にダウンロードされました: $fileName")
} catch (error: StorageException) {
Log.e("MyAmplifyApp", "ダウンロード失敗", error)
}
StorageBucket secondBucket = StorageBucket.fromOutputs("secondBucket");
StorageDownloadFileOptions options = StorageDownloadFileOptions.builder().bucket(secondBucket).build();
RxProgressAwareSingleOperation<StorageDownloadFileResult> download =
RxAmplify.Storage.downloadFile(
StoragePath.fromString("public/example"),
new File(getApplicationContext().getFilesDir() + "/download.txt"),
options
);
download
.observeResult()
.subscribe(
result -> Log.i("MyAmplifyApp", "正常にダウンロードされました: " + result.getFile().getName()),
error -> Log.e("MyAmplifyApp", "ダウンロード失敗", error)
);

あるいは、コンソールからバケット名とリージョンを指定してオブジェクトを渡すこともできます。

BucketInfo bucketInfo = new BucketInfo("second-bucket-name-from-console", "us-east-2");
StorageBucket secondBucket = StorageBucket.fromBucketInfo(bucketInfo);
StorageDownloadFileOptions options = StorageDownloadFileOptions.builder().bucket(secondBucket).build();
Amplify.Storage.downloadFile(
StoragePath.fromString("public/example"),
new File(getApplicationContext().getFilesDir() + "/download.txt"),
options,
result -> Log.i("MyAmplifyApp", "正常にダウンロードされました: " + result.getFile().getName()),
error -> Log.e("MyAmplifyApp", "ダウンロード失敗", error)
);
val bucketInfo = BucketInfo("second-bucket-name-from-console", "us-east-2")
val secondBucket = StorageBucket.fromBucketInfo(bucketInfo)
val options = StorageDownloadFileOptions.builder().bucket(secondBucket).build()
val file = File("${applicationContext.filesDir}/download.txt")
Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file, options,
{ Log.i("MyAmplifyApp", "正常にダウンロードされました: ${it.file.name}") },
{ Log.e("MyAmplifyApp", "ダウンロード失敗", it) }
)
val bucketInfo = BucketInfo("second-bucket-name-from-console", "us-east-2")
val secondBucket = StorageBucket.fromBucketInfo(bucketInfo)
val options = StorageDownloadFileOptions.builder().bucket(secondBucket).build()
val file = File("${applicationContext.filesDir}/download.txt")
val download = Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file, options)
try {
val fileName = download.result().file.name
Log.i("MyAmplifyApp", "正常にダウンロードされました: $fileName")
} catch (error: StorageException) {
Log.e("MyAmplifyApp", "ダウンロード失敗", error)
}
BucketInfo bucketInfo = new BucketInfo("second-bucket-name-from-console", "us-east-2");
StorageBucket secondBucket = StorageBucket.fromBucketInfo(bucketInfo);
StorageDownloadFileOptions options = StorageDownloadFileOptions.builder().bucket(secondBucket).build();
RxProgressAwareSingleOperation<StorageDownloadFileResult> download =
RxAmplify.Storage.downloadFile(
StoragePath.fromString("public/example"),
new File(getApplicationContext().getFilesDir() + "/download.txt"),
options,
);
download
.observeResult()
.subscribe(
result -> Log.i("MyAmplifyApp", "正常にダウンロードされました: " + result.getFile().getName()),
error -> Log.e("MyAmplifyApp", "ダウンロード失敗", error)
);

ダウンロード進捗の監視

Amplify.Storage.downloadFile(
StoragePath.fromString("public/example"),
new File(getApplicationContext().getFilesDir() + "/download.txt"),
StorageDownloadFileOptions.defaultInstance(),
progress -> Log.i("MyAmplifyApp", "完了割合: " + progress.getFractionCompleted()),
result -> Log.i("MyAmplifyApp", "正常にダウンロードされました: " + result.getFile().getName()),
error -> Log.e("MyAmplifyApp", "ダウンロード失敗", error)
);
val file = File("${applicationContext.filesDir}/download.txt")
val options = StorageDownloadFileOptions.defaultInstance()
Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file, options,
{ Log.i("MyAmplifyApp", "完了割合: ${it.fractionCompleted}") },
{ Log.i("MyAmplifyApp", "正常にダウンロードされました: ${it.file.name}") },
{ Log.e("MyAmplifyApp", "ダウンロード失敗", it) }
)
val file = File("${applicationContext.filesDir}/download.txt")
val options = StorageDownloadFileOptions.defaultInstance()
val download = Amplify.Storage.downloadFile(StoragePath.fromString("public/example"), file, options)
val progressJob = activityScope.async {
download.progress().collect { progress ->
Log.i("MyAmplifyApp", "完了割合: ${progress.fractionCompleted}")
}
}
try {
val fileName = download.result().file.name
Log.i("MyAmplifyApp", "正常にダウンロードされました: $fileName")
} catch (error: StorageException) {
Log.e("MyAmplifyApp", "ダウンロード失敗", error)
}
progressJob.cancel()
RxProgressAwareSingleOperation<StorageDownloadFileResult> download =
RxAmplify.Storage.downloadFile(StoragePath.fromString("public/example"), localFile);
download
.observeProgress()
.subscribe(
progress -> Log.i("MyAmplifyApp", progress.getFractionCompleted())
);

転送のクエリ

Amplify Androidライブラリを使用してアップロードまたはダウンロード操作がリクエストされると、リクエストはまずローカルSQLiteデータベースに永続化され、その後実行のためにキューに入ります。アップロードまたはダウンロードAPIによって返された転送IDを使用して、ローカルデータベースでキューに入っている転送操作をクエリできます。Get-Transfer APIは、以前にエンキューされたペンディング転送を取得し、進捗変更、エラー、または成功に関する更新を受け取るためのリスナーをアタッチしたり、一時停止、キャンセル、または再開したりできます。

Amplify.Storage.getTransfer("TRANSFER_ID",
operation -> {
Log.i("MyAmplifyApp", "現在の状態" + operation.getTransferState());
// 更新を受け取るためのリスナーを設定
operation.setOnProgress( progress -> {});
operation.setOnSuccess( result -> {});
operation.setOnError(error -> {});
// 可能なアクション
operation.pause();
operation.resume();
operation.start();
operation.cancel();
},
{
error -> Log.e("MyAmplifyApp", "転送クエリ失敗", error)
}
);
Amplify.Storage.getTransfer("TRANSFER_ID",
{ operation ->
Log.i("MyAmplifyApp", "現在の状態" + operation.transferState)
// 更新を受け取るためのリスナーを設定
operation.setOnProgress { }
operation.setOnSuccess { }
operation.setOnError { }
// 可能なアクション
operation.pause()
operation.resume()
operation.start()
operation.cancel()
},
{
Log.e("MyAmplifyApp", "転送クエリ失敗", it)
}
)
try {
val operation = Amplify.Storage.getTransfer("TRANSFER_ID")
Log.i("MyAmplifyApp", "現在の状態" + operation.transferState)
// 更新を受け取るためのリスナーを設定
operation.setOnProgress { }
operation.setOnSuccess { }
operation.setOnError { }
// 可能なアクション
operation.pause()
operation.resume()
operation.start()
operation.cancel()
} catch (error: StorageException) {
Log.e("MyAmplifyApp", "転送クエリ失敗", error)
}
RxAmplify.Storage.getTransfer("TRANSFER_ID")
.subscribe(
operation -> {
Log.i("MyAmplifyApp", "現在の状態" + operation.getTransferState());
// 更新を受け取るためのリスナーを設定
operation.setOnProgress( progress -> {});
operation.setOnSuccess( result -> {});
operation.setOnError(error -> {});
// 可能なアクション
operation.pause();
operation.resume();
operation.start();
operation.cancel();
},
error -> Log.e("MyAmplifyApp", "転送クエリ失敗", error);
);