Need to configure your backend?See Build a Backend →
ファイルのアップロード
アップロード機能の実装
ファイルからのアップロード
import 'package:amplify_flutter/amplify_flutter.dart';
Future<void> uploadFile() async { try { final result = await Amplify.Storage.uploadFile( localFile: AWSFile.fromPath('/path/to/local/file.txt'), path: const StoragePath.fromString('public/file.txt'), ).result; safePrint('Uploaded file: ${result.uploadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}import 'dart:io' show File;
import 'package:amplify_flutter/amplify_flutter.dart';import 'package:aws_common/vm.dart';
Future<void> uploadFile(File file) async { try { final result = await Amplify.Storage.uploadFile( localFile: AWSFilePlatform.fromFile(file), path: const StoragePath.fromString('public/file.png'), ).result; safePrint('Uploaded file: ${result.uploadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}import 'dart:html' show File;
import 'package:amplify_flutter/amplify_flutter.dart';import 'package:aws_common/web.dart';
Future<void> uploadFile(File file) async { final awsFile = AWSFilePlatform.fromFile(file); try { final result = await Amplify.Storage.uploadFile( localFile: awsFile, path: const StoragePath.fromString('public/file.png'), ).result; safePrint('Uploaded file: ${result.uploadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}Flutterのfile_pickerプラグインからのアップロード
file_pickerプラグインを使用すると、ユーザーのデバイスから任意のファイルタイプを取得できます。
import 'package:amplify_flutter/amplify_flutter.dart';import 'package:file_picker/file_picker.dart';
Future<void> uploadImage() async { // デバイスからファイルを選択する final result = await FilePicker.platform.pickFiles( type: FileType.custom, withData: false, // パフォーマンス向上のためファイルストリームを取得するようにする withReadStream: true, allowedExtensions: ['jpg', 'png', 'gif'], );
if (result == null) { safePrint('No file selected'); return; }
// ファイル名を使用してファイルをアップロードする final platformFile = result.files.single; try { final result = await Amplify.Storage.uploadFile( localFile: AWSFile.fromStream( platformFile.readStream!, size: platformFile.size, ), path: StoragePath.fromString('public/${platformFile.name}'), onProgress: (progress) { safePrint('Fraction completed: ${progress.fractionCompleted}'); }, ).result; safePrint('Successfully uploaded file: ${result.uploadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}データからのアップロード
データオブジェクトからアップロードするには、pathとdataを指定します。dataは様々なデータ形式から作成されたS3DataPayloadのインスタンスです。
Future<void> uploadData() async { try { final result = await Amplify.Storage.uploadData( data: StorageDataPayload.string( 'hello world', contentType: 'text/plain', ), path: const StoragePath.fromString('public/example.txt'), ).result; safePrint('Uploaded data: ${result.uploadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}Future<void> uploadData() async { try { final result = await Amplify.Storage.uploadData( data: StorageDataPayload.json({ 'title': 'example', 'author': { 'firstName': 'Jane', 'lastName': 'Doe', }, }), path: const StoragePath.fromString('public/example.json'), ).result; safePrint('Uploaded data: ${result.uploadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}data URLの詳細はこちらをご参照ください。
Future<void> uploadData() async { // dataUrl should be a valid Data Url. // see: https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Data_URLs const dataUrl = 'data:text/plain;charset=utf-8;base64,aGVsbG8gd29ybGQ='; try { final result = await Amplify.Storage.uploadData( data: StorageDataPayload.dataUrl(dataUrl), path: const StoragePath.fromString('public/example.txt'), ).result; safePrint('Uploaded data: ${result.uploadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}Future<void> uploadBytes() async { try { final bytes = 'hello world'.codeUnits; final result = await Amplify.Storage.uploadData( data: StorageDataPayload.bytes( bytes, contentType: 'text/plain', ), path: const StoragePath.fromString('public/example.txt'), ).result; safePrint('Uploaded data: ${result.uploadedItem.path}'); } on StorageException catch (e) { safePrint(e.message); }}アップロードの進捗を監視する
final operation = Amplify.Storage.uploadFile( localFile: AWSFile.fromPath('/path/to/local/file'), path: const StoragePath.fromString('public/example.txt'), onProgress: (progress) { safePrint('fraction totalBytes: ${progress.totalBytes}'); safePrint('fraction transferredBytes: ${progress.transferredBytes}'); safePrint('fraction completed: ${progress.fractionCompleted}'); });アップロードの一時停止、再開、キャンセル
Amplify.Storage.uploadFileまたはAmplify.Storage.uploadDataの呼び出しは、アップロードを実行している操作への参照を返します。
Future<void> upload() async { final operation = Amplify.Storage.uploadFile( localFile: AWSFile.fromPath('/path/to/local/file'), path: const StoragePath.fromString('public/example.txt'), );
// 操作を一時停止する await operation.pause();
// 操作を再開する await operation.resume();
// 操作をキャンセルする await operation.cancel();}指定したバケットへのアップロード
bucketオプションを指定することで、特定のバケットに対してupload操作を実行することもできます。Amplify Backendで定義した名前を使ってターゲットバケットを表すStorageBucketオブジェクトを渡すことができます。
final data = 'multi bucket upload data byte'.codeUnits;final result = await Amplify.Storage.uploadData( data: StorageDataPayload.bytes(data), path: const StoragePath.fromString('path/to/file.txt'), options: StorageUploadDataOptions( // Amplify Backendで割り当てられた名前を使ってターゲットバケットを指定する bucket: StorageBucket.fromOutputs('secondBucket'), ),).result;あるいは、コンソールからバケット名とリージョンを指定してオブジェクトを渡すこともできます。
final data = 'multi bucket upload data byte'.codeUnits;final result = await Amplify.Storage.uploadData( data: StorageDataPayload.bytes(data), path: const StoragePath.fromString('path/to/file.txt'), options: StorageUploadDataOptions( // あるいは、コンソールからバケット名と関連するリージョンを指定する bucket: StorageBucket.fromBucketInfo( BucketInfo( bucketName: 'second-bucket-name-from-console', region: 'us-east-2', ), ), ),).result;その他のアップロードオプション
| オプション | 型 | 説明 |
|---|---|---|
| bucket | StorageBucket | Amplify Backendで割り当てられた名前またはコンソールのバケット名とリージョンから指定するターゲットバケット。 このオプションが指定されていない場合は、Amplify設定のデフォルトバケットとリージョンが使用されます。 詳細は追加のストレージバケットの設定をご覧ください。 |
| getProperties | boolean | 操作完了後にAmplify.Storage.getProperties()を使用してアップロードされたオブジェクトのプロパティを取得するかどうか。trueに設定すると、返されるアイテムにメタデータやコンテンツタイプなどの追加情報が含まれます。 |
| useAccelerateEndpoint | boolean | アクセラレートエンドポイントを使用するかどうか。 詳細はTransfer Accelerationをご覧ください。 |
uploadFileのオプション使用例:
final operation = Amplify.Storage.uploadFile( localFile: AWSFile.fromPath('/path/to/local/file'), path: const StoragePath.fromString('public/example.txt'), options: const StorageUploadFileOptions( metadata: {'key': 'value'}, pluginOptions: S3UploadFilePluginOptions( getProperties: true, useAccelerateEndpoint: true, ), ),);uploadDataのオプション使用例:
final operation = Amplify.Storage.uploadData( data: StorageDataPayload.string('example'), path: const StoragePath.fromString('public/example.txt'), options: const StorageUploadDataOptions( metadata: {'key': 'value'}, pluginOptions: S3UploadDataPluginOptions( getProperties: true, useAccelerateEndpoint: true, ), ),);マルチパートアップロード
Amplifyは5MBを超えるオブジェクトに対して自動的にAmazon S3マルチパートアップロードを実行します。S3のマルチパートアップロードの詳細については、マルチパートアップロードを使用したオブジェクトのアップロードとコピーを参照してください。