Flutter AWS S3集成插件aws_s3_cookoo的使用

Flutter AWS S3 集成插件 aws_s3_cookoo 的使用

aws_s3_upload

这是一个用于向 S3 上传文件的简单且方便的包。

这个 StackOverflow 回答 的启发。

动机 / 免责声明

已经存在许多用于与 S3 交互的 Flutter 插件,其中一些维护得更活跃。这个小型库是为了解决我尝试的一些插件无法开箱即用或者需要使用 Pool ID 和 AWS Cognito(我的项目并不使用这些功能)的问题。根据您的具体情况可能会有所不同。

开始使用

在 AWS 上创建凭据后,可以按以下方式上传文件:

import 'package:path_provider/path_provider.dart';
import 'package:aws_s3_cookoo/aws_s3_cookoo.dart';

void main() async {
  // 获取文件路径
  final directory = await getApplicationDocumentsDirectory();
  final filePath = "${directory.path}/example.txt";

  // 创建一个示例文件
  final file = await new File(filePath).writeAsString('Hello World!');

  // 使用 AWS 凭证上传文件
  AwsS3.uploadFile(
    accessKey: "AKxxxxxxxxxxxxx",
    secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxx",
    file: file,
    bucket: "bucket_name",
    region: "us-east-2"
  );
}

以上代码中,我们首先通过 path_provider 包获取应用程序文档目录,并创建一个示例文本文件。然后,我们使用 aws_s3_cookoo 包中的 AwsS3.uploadFile 方法将文件上传到 S3 存储桶。

完整示例 Demo

以下是一个完整的示例 Demo,演示如何使用 aws_s3_cookoo 包上传文件到 S3。

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart';
import 'package:aws_s3_cookoo/aws_s3_cookoo.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('AWS S3 Upload Example')),
        body: Center(
          child: RaisedButton(
            onPressed: () async {
              try {
                // 获取文件路径
                final directory = await getApplicationDocumentsDirectory();
                final filePath = "${directory.path}/example.txt";

                // 创建一个示例文件
                final file = await new File(filePath).writeAsString('Hello World!');

                // 使用 AWS 凭证上传文件
                await AwsS3.uploadFile(
                  accessKey: "AKxxxxxxxxxxxxx",
                  secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxx",
                  file: file,
                  bucket: "bucket_name",
                  region: "us-east-2"
                );

                print("File uploaded successfully!");
              } catch (e) {
                print("Failed to upload file: $e");
              }
            },
            child: Text('Upload File'),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter AWS S3集成插件aws_s3_cookoo的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter AWS S3集成插件aws_s3_cookoo的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


aws_s3_cookoo 是一个用于在 Flutter 应用中集成 AWS S3 的插件。它提供了简单易用的 API,帮助开发者轻松地上传、下载和管理 S3 存储桶中的文件。以下是如何使用 aws_s3_cookoo 插件的详细步骤。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 aws_s3_cookoo 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  aws_s3_cookoo: ^1.0.0  # 请检查最新版本

然后运行 flutter pub get 来获取依赖。

2. 配置 AWS S3

在使用 aws_s3_cookoo 之前,你需要配置 AWS S3 的访问权限。通常,你需要以下信息:

  • Bucket Name: S3 存储桶的名称。
  • Region: S3 存储桶所在的区域(如 us-east-1)。
  • Access Key: AWS IAM 用户的访问密钥。
  • Secret Key: AWS IAM 用户的秘密密钥。

3. 初始化 AWS S3 客户端

在你的 Flutter 应用中,初始化 AWS S3 客户端。

import 'package:aws_s3_cookoo/aws_s3_cookoo.dart';

void initAwsS3() {
  AwsS3.init(
    bucket: 'your-bucket-name',
    region: 'your-region',
    accessKey: 'your-access-key',
    secretKey: 'your-secret-key',
  );
}

4. 上传文件到 S3

使用 AwsS3.uploadFile 方法将文件上传到 S3。

import 'package:flutter/material.dart';
import 'package:aws_s3_cookoo/aws_s3_cookoo.dart';
import 'package:image_picker/image_picker.dart';

class UploadFileScreen extends StatefulWidget {
  @override
  _UploadFileScreenState createState() => _UploadFileScreenState();
}

class _UploadFileScreenState extends State<UploadFileScreen> {
  final ImagePicker _picker = ImagePicker();

  Future<void> uploadFile() async {
    final pickedFile = await _picker.getImage(source: ImageSource.gallery);
    if (pickedFile != null) {
      final filePath = pickedFile.path;
      final fileName = filePath.split('/').last;

      try {
        final response = await AwsS3.uploadFile(
          filePath: filePath,
          fileName: fileName,
        );
        print('File uploaded: ${response.url}');
      } catch (e) {
        print('Error uploading file: $e');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Upload File to S3'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: uploadFile,
          child: Text('Upload File'),
        ),
      ),
    );
  }
}

5. 下载文件从 S3

使用 AwsS3.downloadFile 方法从 S3 下载文件。

Future<void> downloadFile(String fileKey) async {
  try {
    final filePath = await AwsS3.downloadFile(
      fileKey: fileKey,
      savePath: '/path/to/save/file',
    );
    print('File downloaded to: $filePath');
  } catch (e) {
    print('Error downloading file: $e');
  }
}

6. 删除 S3 中的文件

使用 AwsS3.deleteFile 方法删除 S3 中的文件。

Future<void> deleteFile(String fileKey) async {
  try {
    await AwsS3.deleteFile(fileKey: fileKey);
    print('File deleted: $fileKey');
  } catch (e) {
    print('Error deleting file: $e');
  }
}

7. 列出 S3 存储桶中的文件

使用 AwsS3.listFiles 方法列出 S3 存储桶中的文件。

Future<void> listFiles() async {
  try {
    final files = await AwsS3.listFiles();
    print('Files in bucket: $files');
  } catch (e) {
    print('Error listing files: $e');
  }
}
回到顶部