Flutter AWS S3存储插件aws_s3_storage的使用

Flutter AWS S3存储插件aws_s3_storage的使用

aws_s3_storage 是一个简单且方便的 Flutter 插件,用于将文件上传到 AWS S3 存储。它受到 Stack Overflow 上的回答 的启发。

动机/免责声明

已经存在许多与 S3 交互的 Flutter 插件,其中一些维护得更好。这个小库之所以被创建,是因为我尝试过的少数插件要么无法正常工作,要么需要使用 Pool ID 和 AWS Cognito,而我的项目并不使用这些功能。具体情况可能因项目而异(YMMV)。

开始使用

在 AWS 上创建凭证后,可以使用以下方式上传文件:

import 'package:path_provider/path_provider.dart'; // 用于获取文件路径
import 'package:file/file.dart'; // 文件操作
import 'package:aws_s3_storage/aws_s3_storage.dart'; // 导入 aws_s3_storage 插件

void uploadFileToS3() async {
  // 获取临时目录
  final directory = await getTemporaryDirectory();
  
  // 创建一个测试文件
  final filePath = '${directory.path}/test.txt';
  final file = File(filePath);
  await file.writeAsString('Hello, AWS S3!');

  // 使用 AwsS3.uploadFile 方法上传文件
  try {
    await AwsS3.uploadFile(
      accessKey: "AKxxxxxxxxxxxxx", // AWS 访问密钥
      secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxx", // AWS 秘密访问密钥
      file: file, // 要上传的文件
      bucket: "bucket_name", // S3 存储桶名称
      region: "us-east-2" // S3 区域
    );
    print("文件上传成功!");
  } catch (e) {
    print("文件上传失败: $e");
  }
}

完整示例代码

以下是一个完整的示例代码,展示了如何使用 aws_s3_storage 插件上传文件到 AWS S3:

import 'package:flutter/material.dart';
import 'package:path_provider/path_provider.dart'; // 用于获取文件路径
import 'package:file/file.dart'; // 文件操作
import 'package:aws_s3_storage/aws_s3_storage.dart'; // 导入 aws_s3_storage 插件

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 文件上传示例'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () {
              uploadFileToS3();
            },
            child: Text('上传文件到 S3'),
          ),
        ),
      ),
    );
  }
}

void uploadFileToS3() async {
  // 获取临时目录
  final directory = await getTemporaryDirectory();
  
  // 创建一个测试文件
  final filePath = '${directory.path}/test.txt';
  final file = File(filePath);
  await file.writeAsString('Hello, AWS S3!');

  // 使用 AwsS3.uploadFile 方法上传文件
  try {
    await AwsS3.uploadFile(
      accessKey: "AKxxxxxxxxxxxxx", // AWS 访问密钥
      secretKey: "xxxxxxxxxxxxxxxxxxxxxxxxxx", // AWS 秘密访问密钥
      file: file, // 要上传的文件
      bucket: "bucket_name", // S3 存储桶名称
      region: "us-east-2" // S3 区域
    );
    print("文件上传成功!");
  } catch (e) {
    print("文件上传失败: $e");
  }
}

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

1 回复

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


在Flutter中使用aws_s3_storage插件与Amazon S3进行交互,可以帮助你轻松地上传、下载和管理存储在S3中的文件。以下是如何使用aws_s3_storage插件的基本步骤。

1. 安装插件

首先,你需要在pubspec.yaml文件中添加aws_s3_storage插件的依赖项:

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

然后运行flutter pub get来安装插件。

2. 配置AWS凭证

在Flutter项目中使用AWS S3之前,你需要配置AWS凭证。通常,你可以通过以下几种方式配置凭证:

  • 直接配置:在代码中直接设置AWS的accessKeyIdsecretAccessKey
  • 环境变量:通过环境变量设置AWS凭证。
  • AWS配置文件:使用~/.aws/credentials文件来配置凭证。

3. 初始化AWS S3客户端

在你的Flutter代码中,初始化AWS S3客户端:

import 'package:aws_s3_storage/aws_s3_storage.dart';

final s3 = AwsS3Storage(
  region: 'us-east-1',  // 你的S3存储桶所在区域
  bucketName: 'your-bucket-name',  // 你的S3存储桶名称
  accessKeyId: 'your-access-key-id',  // 你的AWS访问密钥ID
  secretAccessKey: 'your-secret-access-key',  // 你的AWS秘密访问密钥
);

4. 上传文件到S3

你可以使用uploadFile方法将文件上传到S3:

import 'dart:io';

void uploadFile() async {
  final file = File('/path/to/your/file.txt');
  final key = 'your-folder/file.txt';  // S3中的文件路径

  try {
    await s3.uploadFile(file: file, key: key);
    print('File uploaded successfully');
  } catch (e) {
    print('Error uploading file: $e');
  }
}

5. 下载文件从S3

你可以使用downloadFile方法从S3下载文件:

void downloadFile() async {
  final key = 'your-folder/file.txt';  // S3中的文件路径
  final file = File('/path/to/save/file.txt');

  try {
    await s3.downloadFile(key: key, file: file);
    print('File downloaded successfully');
  } catch (e) {
    print('Error downloading file: $e');
  }
}

6. 列出S3中的文件

你可以使用listFiles方法列出S3存储桶中的文件:

void listFiles() async {
  try {
    final files = await s3.listFiles(prefix: 'your-folder/');
    print('Files in S3: $files');
  } catch (e) {
    print('Error listing files: $e');
  }
}

7. 删除S3中的文件

你可以使用deleteFile方法删除S3中的文件:

void deleteFile() async {
  final key = 'your-folder/file.txt';  // S3中的文件路径

  try {
    await s3.deleteFile(key: key);
    print('File deleted successfully');
  } catch (e) {
    print('Error deleting file: $e');
  }
}

8. 处理权限和策略

确保你的AWS IAM用户或角色具有适当的权限来执行S3操作。你可以在AWS IAM控制台中配置策略,例如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject",
        "s3:ListBucket"
      ],
      "Resource": [
        "arn:aws:s3:::your-bucket-name",
        "arn:aws:s3:::your-bucket-name/*"
      ]
    }
  ]
}
回到顶部