Flutter AWS S3客户端操作插件flutter_aws_s3_client的使用
Flutter AWS S3 客户端操作插件 flutter_aws_s3_client
的使用
注意: 由于现在已有官方的 AWS 服务访问包,此插件已不再维护。建议迁移至 AWS Amplify Flutter 或 Amplify Storage S3 示例。
flutter_aws_s3_client
该插件支持从 S3 下载对象和列出桶中的对象。大部分复杂的工作由 Amazon Cognito Identity SDK for Dart 完成,本项目仅包含一些常用的便捷方法。如果你需要更多的请求,可以直接构建所需的请求。如果有更多方法实现,欢迎提交 Pull Request。
使用方法
构建客户端
const region = "eu-central-1";
const bucketId = "yourBucketId";
final AwsS3Client s3client = AwsS3Client(
region: region,
host: "s3.$region.amazonaws.com",
bucketId: bucketId,
accessKey: "<your access key>",
secretKey: "<your secret key>");
获取对象
final response = await s3client.getObject("your/object/key");
print(response.body.toString());
列出桶中的对象
ListBucketResult listBucketResult = await s3client.listObjects(prefix: "dir1/dir2/", delimiter: "/");
print(listBucketResult.toString());
下载大对象到文件(流式处理)
如果需要下载大对象而不一次性加载到内存中,可以使用 buildSignedGetParams
方法。
示例代码(带 ETag 支持):
Future<void> download(String key, File file, [String etag = null]) async {
final signedParams = awsS3Client.buildSignedGetParams(key: key);
final request = await HttpClient().getUrl(signedParams.uri);
for (final header in (signedParams.headers ?? const {}).entries) {
request.headers.add(header.key, header.value);
}
if(etag != null){
request.headers.add(HttpHeaders.ifNoneMatchHeader, etag);
}
final response = await request.close();
if(response.statusCode != HttpStatus.ok){
// 处理错误
} else {
return response.pipe(file.openWrite());
}
}
完整示例代码
以下是一个完整的示例代码,展示了如何使用 flutter_aws_s3_client
插件来列出桶中的对象并获取对象。
import 'dart:io';
import 'package:flutter_aws_s3_client/flutter_aws_s3_client.dart';
import 'package:path_provider/path_provider.dart';
void main() async {
const region = "eu-central-1";
const bucketId = "yourBucketId";
final AwsS3Client s3client = AwsS3Client(
region: region,
host: "s3.$region.amazonaws.com",
bucketId: bucketId,
accessKey: "<your access key>",
secretKey: "<your secret key>");
// 列出桶中的对象
ListBucketResult listBucketResult = await s3client.listObjects(prefix: "dir/dir2/", delimiter: "/");
print(listBucketResult.toString());
// 获取对象
final response = await s3client.getObject("yourObjectId");
print(response.body.toString());
// 下载大对象到文件
final directory = await getApplicationDocumentsDirectory();
final file = File("${directory.path}/yourFile.txt");
await download("your/large/object/key", file);
}
// 下载函数
Future<void> download(String key, File file, [String etag = null]) async {
final signedParams = awsS3Client.buildSignedGetParams(key: key);
final request = await HttpClient().getUrl(signedParams.uri);
for (final header in (signedParams.headers ?? const {}).entries) {
request.headers.add(header.key, header.value);
}
if(etag != null){
request.headers.add(HttpHeaders.ifNoneMatchHeader, etag);
}
final response = await request.close();
if(response.statusCode != HttpStatus.ok){
// 处理错误
} else {
return response.pipe(file.openWrite());
}
}
更多关于Flutter AWS S3客户端操作插件flutter_aws_s3_client的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复