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

ファイルのアップロード

アップロード機能の実装

注意: ストレージAPIのTransfer Accelerationを有効にする方法については、Transfer Accelerationのドキュメントを参照してください。

ファイルからのアップロード

注意: AWSFilePlatformを使用するには、flutter pub add aws_commonを実行してFlutterプロジェクトにaws_commonパッケージを追加してください。

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);
}
}

データからのアップロード

データオブジェクトからアップロードするには、pathdataを指定します。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;

その他のアップロードオプション

オプション説明
bucketStorageBucketAmplify Backendで割り当てられた名前またはコンソールのバケット名とリージョンから指定するターゲットバケット。

このオプションが指定されていない場合は、Amplify設定のデフォルトバケットとリージョンが使用されます。

詳細は追加のストレージバケットの設定をご覧ください。
getPropertiesboolean操作完了後にAmplify.Storage.getProperties()を使用してアップロードされたオブジェクトのプロパティを取得するかどうか。trueに設定すると、返されるアイテムにメタデータやコンテンツタイプなどの追加情報が含まれます。
useAccelerateEndpointbooleanアクセラレートエンドポイントを使用するかどうか。

詳細は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のマルチパートアップロードの詳細については、マルチパートアップロードを使用したオブジェクトのアップロードとコピーを参照してください。