You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需AWS Cognito认证即可通过Flutter Amplify访问S3存储桶

方案可行性结论

该方案完全可行,amplify_storage_s3 原生支持未认证访客访问模式,不需要绑定AWS Cognito用户池,即可对接你已经设置为公开访问的S3桶实现文件上传、下载操作。


核心配置要求

  • 初始化Amplify Storage时,不需要关联任何Cognito相关资源,仅需填入你的S3桶名称、所属区域即可
  • Amplify配置项中将默认访问级别设为guest,同时不需要配置身份验证相关参数
  • 确认你的S3桶策略已经开放了对应操作的权限:如果仅需要公开下载,开放s3:GetObject权限即可;如果需要支持公开上传,额外开放s3:PutObject权限给公共主体*

代码示例(Flutter生态)

基础初始化配置

import 'package:amplify_flutter/amplify_flutter.dart';
import 'package:amplify_storage_s3/amplify_storage_s3.dart';
import 'dart:io';

Future<void> initAmplifyStorage() async {
  final storagePlugin = AmplifyStorageS3();
  await Amplify.addPlugin(storagePlugin);
  
  // 仅配置S3存储相关参数,不需要添加Cognito配置
  const amplifyConfig = '''
{
  "storage": {
    "plugins": {
      "awsS3": {
        "bucket": "你的公开S3桶名称",
        "region": "桶所在区域,例:ap-northeast-1",
        "defaultAccessLevel": "guest"
      }
    }
  }
}
''';
  
  try {
    await Amplify.configure(amplifyConfig);
    print("存储配置初始化成功");
  } catch (e) {
    print("初始化失败: $e");
  }
}

文件上传示例

Future<void> uploadPublicFile(String localFilePath, String s3StorageKey) async {
  final targetFile = File(localFilePath);
  try {
    final uploadRes = await Amplify.Storage.uploadFile(
      local: targetFile,
      key: s3StorageKey,
      options: const StorageUploadFileOptions(
        accessLevel: StorageAccessLevel.guest,
      ),
    ).result;
    print("文件上传成功,存储路径:${uploadRes.uploadedItem.key}");
  } on StorageException catch (e) {
    print("上传失败:${e.message}");
  }
}

文件下载示例

Future<void> downloadPublicFile(String s3StorageKey, String localSavePath) async {
  final saveFile = File(localSavePath);
  try {
    final downloadRes = await Amplify.Storage.downloadFile(
      key: s3StorageKey,
      local: saveFile,
      options: const StorageDownloadFileOptions(
        accessLevel: StorageAccessLevel.guest,
      ),
    ).result;
    print("文件下载成功,本地路径:${downloadRes.file.path}");
  } on StorageException catch (e) {
    print("下载失败:${e.message}");
  }
}

注意事项

  • 完全开放上传权限的公开S3桶存在被恶意上传非法文件、盗刷流量的风险,建议根据业务需求通过桶策略限制可上传的文件后缀、单文件大小、请求来源IP,避免产生额外成本和合规风险
  • 如果后续业务需要新增用户私有存储场景,再补充Cognito用户池配置即可,不需要修改现有公开存储的核心逻辑

内容的提问来源于stack exchange,提问作者Yasas Nanayakkara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:36:03