Flutter AWS S3集成插件aws_s3_cooko的使用

Flutter AWS S3集成插件aws_s3_cooko的使用

aws_s3_upload

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

灵感来源
此库深受这篇Stack Overflow回答的启发。


动机/免责声明

已经有许多用于与S3交互的Flutter插件,其中一些维护得更活跃。此小型库的构建是因为我发现少数几个插件要么无法开箱即用,要么需要使用Pool ID和AWS Cognito(而我的项目并不使用这些功能)。您的体验可能会有所不同(YMMV)。


开始使用

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

import 'package:path_provider/path_provider.dart'; // 用于获取文件路径
import 'package:aws_s3_cooko/aws_s3_cooko.dart'; // 导入aws_s3_cooko包

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

  // 创建文件对象
  final file = File(filePath);

  // 写入示例内容到文件
  await file.writeAsString('Hello, AWS S3!');

  // 调用上传方法
  try {
    await AwsS3.uploadFile(
      accessKey: "AKxxxxxxxxxxxxx", // 替换为您的AWS访问密钥
      secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxx", // 替换为您的AWS秘密密钥
      file: file, // 文件对象
      bucket: "bucket_name", // 替换为您的S3存储桶名称
      region: "us-east-2" // 替换为您所在的区域
    );

    print("文件上传成功!");
  } catch (e) {
    print("文件上传失败: $e");
  }
}

完整示例代码

以下是完整的示例代码,展示如何上传文件到S3:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('AWS S3 文件上传示例')),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              uploadFile();
            },
            child: Text('上传文件'),
          ),
        ),
      ),
    );
  }

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

      // 创建文件对象并写入数据
      final file = File(filePath);
      await file.writeAsString('Hello, AWS S3!');

      // 调用上传方法
      await AwsS3.uploadFile(
        accessKey: "AKxxxxxxxxxxxxx", // 替换为您的AWS访问密钥
        secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxx", // 替换为您的AWS秘密密钥
        file: file,
        bucket: "bucket_name", // 替换为您的S3存储桶名称
        region: "us-east-2" // 替换为您所在的区域
      );

      print("文件上传成功!");
    } catch (e) {
      print("文件上传失败: $e");
    }
  }
}

注意事项

  1. 安全性
    请确保不要将accessKeysecretKey硬编码在代码中,建议通过环境变量或安全的方式管理这些敏感信息。

  2. 依赖安装
    pubspec.yaml中添加依赖:

    dependencies:
      aws_s3_cooko: ^版本号
      path_provider: ^版本号
    

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

1 回复

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


aws_s3_cooko 是一个用于在 Flutter 应用中集成 AWS S3 的插件。它提供了简单易用的 API,用于上传、下载和管理 S3 存储桶中的文件。以下是如何在 Flutter 项目中使用 aws_s3_cooko 插件的步骤:

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 aws_s3_cooko 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  aws_s3_cooko: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装依赖。

2. 配置 AWS S3

在使用 aws_s3_cooko 之前,你需要在 AWS 控制台中配置 S3 存储桶,并获取以下信息:

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

3. 初始化插件

在你的 Flutter 应用中初始化 aws_s3_cooko 插件:

import 'package:aws_s3_cooko/aws_s3_cooko.dart';

void main() {
  AwsS3Cooko.initialize(
    bucketName: 'your-bucket-name',
    region: 'your-region',
    accessKey: 'your-access-key',
    secretKey: 'your-secret-key',
  );
  runApp(MyApp());
}

4. 上传文件

使用 AwsS3Cooko.uploadFile 方法上传文件到 S3 存储桶:

import 'package:flutter/material.dart';
import 'package:aws_s3_cooko/aws_s3_cooko.dart';

class UploadFileScreen extends StatelessWidget {
  Future<void> uploadFile() async {
    try {
      final filePath = '/path/to/your/file.txt'; // 本地文件路径
      final s3Key = 'uploads/file.txt'; // S3 中的文件路径

      final response = await AwsS3Cooko.uploadFile(
        filePath: filePath,
        s3Key: s3Key,
      );

      print('File uploaded successfully: ${response.url}');
    } catch (e) {
      print('Error uploading file: $e');
    }
  }

  [@override](/user/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. 下载文件

使用 AwsS3Cooko.downloadFile 方法从 S3 存储桶下载文件:

import 'package:flutter/material.dart';
import 'package:aws_s3_cooko/aws_s3_cooko.dart';

class DownloadFileScreen extends StatelessWidget {
  Future<void> downloadFile() async {
    try {
      final s3Key = 'uploads/file.txt'; // S3 中的文件路径
      final savePath = '/path/to/save/file.txt'; // 本地保存路径

      await AwsS3Cooko.downloadFile(
        s3Key: s3Key,
        savePath: savePath,
      );

      print('File downloaded successfully');
    } catch (e) {
      print('Error downloading file: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Download File from S3'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: downloadFile,
          child: Text('Download File'),
        ),
      ),
    );
  }
}

6. 删除文件

使用 AwsS3Cooko.deleteFile 方法从 S3 存储桶中删除文件:

import 'package:flutter/material.dart';
import 'package:aws_s3_cooko/aws_s3_cooko.dart';

class DeleteFileScreen extends StatelessWidget {
  Future<void> deleteFile() async {
    try {
      final s3Key = 'uploads/file.txt'; // S3 中的文件路径

      await AwsS3Cooko.deleteFile(
        s3Key: s3Key,
      );

      print('File deleted successfully');
    } catch (e) {
      print('Error deleting file: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Delete File from S3'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: deleteFile,
          child: Text('Delete File'),
        ),
      ),
    );
  }
}
回到顶部