ファイルのダウンロード
アプリ内の体験をさらにカスタマイズするには、Amplify Library for StorageからgetUrlまたはdownloadData 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を作成する場合、AWSS3StorageGetPresignedUrlOptionsでvalidateObjectExistenceをtrueに設定することで、ファイルが存在するかどうかを確認することができます。ファイルにアクセスできないか存在しない場合、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オプション
| オプション | タイプ | 説明 |
|---|---|---|
| bucket | StorageBucket | オブジェクトが保存されているバケット。 |
| expires | Integer | URLが期限切れになるまでの秒数。 |
| useAccelerateEndpoint | Boolean | アクセラレートモードの使用を構成するフラグ。 |
| validateObjectExistence | Boolean | ファイルが存在するかどうかをチェックするフラグ。 |
ファイルへのダウンロード
downloadFile APIを使用してファイルをクライアント上にローカルにダウンロードします。
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); );