ファイルのダウンロード
アプリ内の体験をさらにカスタマイズするには、Amplify Library for StorageからgetUrlまたはdownloadData APIを使用できます。
URLからファイルを取得またはダウンロードする
getUrl APIを使用すると、デフォルトで900秒または15分間有効な署名付きURLを取得できます。このURLを使用して、ユーザーがクリックするためのダウンロードリンクを作成できます。expiresAtプロパティはURLが期限切れになる時間を表すDateオブジェクトです。
ダウンロード可能なURLを作成する場合、S3GetUrlPluginOptionsでvalidateObjectExistenceをtrueに設定することで、ファイルが存在するかどうかを確認することができます。ファイルにアクセスできないか存在しない場合、StorageExceptionがスローされます。これにより、署名付きURLを生成するときにオブジェクトが存在するかどうかをチェックでき、その後、そのオブジェクトをダウンロードするために使用できます。また、StorageGetUrlOptionsにバケットを渡すことで、バックエンドで選択した名前またはコンソール名とリージョンから、ターゲットバケットを指定できます。バケットが指定されていない場合、バックエンドで定義されたデフォルトバケットが使用されます。詳細は追加ストレージバケットの構成を参照してください。
Future<void> getDownloadUrl() async { try { final result = await Amplify.Storage.getUrl( path: const StoragePath.fromString('public/example.txt'), /* // バックエンドで定義されたバケット名に基づいて特定のバケットをターゲット options: StorageGetUrlOptions( bucket: StorageBucket.fromOutputs('secondBucket'), ), */ ).result; safePrint('url: ${result.url}'); } on StorageException catch (e) { safePrint(e.message); }}ファイルへのダウンロード
Amplify.Storage.downloadFileを使用してローカルディレクトリにファイルをダウンロードできます。
path_providerパッケージを使用して、ダウンロードしたデータを保存できるユーザーのドキュメントディレクトリにローカルファイルを作成できます。
import 'package:amplify_flutter/amplify_flutter.dart';import 'package:path_provider/path_provider.dart';
Future<void> downloadFile() async { final documentsDir = await getApplicationDocumentsDirectory(); final filepath = '${documentsDir.path}/example.txt'; try { final result = await Amplify.Storage.downloadFile( path: const StoragePath.fromString('public/example.txt'), localFile: AWSFile.fromPath(filepath), ).result; safePrint('ダウンロードされたファイルは次の場所にあります: ${result.localFile.path}'); } on StorageException catch (e) { safePrint(e.message); }}Webでは、ダウンロードプロセスはブラウザによって処理されます。AWSFile.fromPathのpathパラメータを指定することで、ダウンロードされたファイル名を指定できます。例えば、これはブラウザにdownload.txtファイルをダウンロードするよう指示します。
import 'package:amplify_flutter/amplify_flutter.dart';
Future<void> downloadFile() async { try { final result = await Amplify.Storage.downloadFile( path: const StoragePath.fromString('public/example.txt'), localFile: AWSFile.fromPath('download.txt'), ).result; safePrint('ダウンロードされたファイル: ${result.downloadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}ダウンロード進捗の監視
final operation = Amplify.Storage.downloadData( path: const StoragePath.fromString('public/example.txt'), onProgress: (progress) { safePrint('分数totalBytes: ${progress.totalBytes}'); safePrint('分数transferredBytes: ${progress.transferredBytes}'); safePrint('分数完了: ${progress.fractionCompleted}'); },);ダウンロードを一時停止、再開、キャンセル
Future<void> upload() async { final operation = Amplify.Storage.downloadFile( localFile: AWSFile.fromPath('/path/to/local/file'), path: const StoragePath.fromString('public/example.txt'), );
// 操作を一時停止 await operation.pause();
// 操作を再開 await operation.resume();
// 操作をキャンセル await operation.cancel();}メモリ内のデータをダウンロードするAPI
Amplify.Storage.downloadDataでメモリ内バッファにファイルをダウンロードできます:
Future<void> download() async { try { final result = await Amplify.Storage.downloadData( path: const StoragePath.fromString('public/example.txt'), ).result; safePrint('ダウンロードされたデータ: ${result.bytes}'); } on StorageException catch (e) { safePrint(e.message); }}その他のダウンロードオプション
| オプション | タイプ | 説明 |
|---|---|---|
| bucket | StorageBucket | Amplify Backendで割り当てられた名前または コンソールのバケット名とリージョンからのターゲットバケット このオプションが指定されていない場合、Amplify設定のデフォルトバケットとリージョンにデフォルト設定されます。 追加ストレージバケットの構成を参照してください |
| getProperties | boolean | 操作完了後にAmplify.Storage.getProperties()を使用してダウンロードされたオブジェクトのプロパティを取得するかどうか。true に設定すると、返されたアイテムにはメタデータやコンテンツタイプなどの追加情報が含まれます。 |
| useAccelerateEndpoint | boolean | アクセラレートエンドポイントを使用するかどうか。 転送高速化を参照してください |
| bytesRange | S3DataBytesRange | オブジェクトからダウンロードするバイト範囲 |
downloadFileとオプションの例
final operation = Amplify.Storage.downloadFile( path: const StoragePath.fromString('public/example.txt'), localFile: AWSFile.fromPath('/path/to/local/file.txt'), options: const StorageDownloadFileOptions( pluginOptions: S3DownloadFilePluginOptions( getProperties: true, useAccelerateEndpoint: true, ), bucket: StorageBucket.fromOutputs('secondBucket'), ),);downloadDataとオプションの例
final operation = Amplify.Storage.downloadData( path: const StoragePath.fromString('public/example.txt'), options: StorageDownloadDataOptions( pluginOptions: S3DownloadDataPluginOptions( getProperties: true, useAccelerateEndpoint: true, bytesRange: S3DataBytesRange(start: 0, end: 100), ), ),);bucketオプションを指定して、downloadDataまたはdownloadFile操作を特定のバケットに対して実行することもできます。Amplify Backendで定義されたバケット名からのターゲットバケットを表すStorageBucketオブジェクトを渡すことができます。
final operation = Amplify.Storage.downloadFile( path: const StoragePath.fromString('public/example.txt'), localFile: AWSFile.fromPath('/path/to/local/file.txt'), options: const StorageDownloadFileOptions( pluginOptions: S3DownloadFilePluginOptions( getProperties: true, useAccelerateEndpoint: true, ), bucket: StorageBucket.fromOutputs('secondBucket'), ),);あるいは、コンソールからバケット名とリージョンを指定してオブジェクトを渡すこともできます。
final operation = Amplify.Storage.downloadData( path: const StoragePath.fromString('public/example.txt'), options: StorageDownloadDataOptions( pluginOptions: S3DownloadDataPluginOptions( getProperties: true, useAccelerateEndpoint: true, bytesRange: S3DataBytesRange(start: 0, end: 100), ), bucket: StorageBucket.fromBucketInfo( BucketInfo( bucketName: 'second-bucket-name-from-console', region: 'us-east-2', ), ), ),);