放大Flutter,使用S3的downloadFile时找不到key:“指定的key不存在”

问题描述 投票:0回答:1

我想要从 S3 存储桶进行非授权下载。我已启用公共访问和 ACL 的所有选项。调整设置后,我终于不再遇到拒绝访问的错误。但是,现在我找不到任何文件。 我上传的所有数据都是通过 AWS 网络上传的。

桶政策:

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "PublicRead",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::<the bucket>/*"
    }
]}

现在我有一个新问题。我找不到文件,出现此错误:

NoSuchKey
指定的密钥不存在。public//100/gif1.gif(服务:Amazon S3;状态代码:404;错误代码:404 Not Found;请求 ID:***'),

这是代码:

Future<void> downloadFromS3(String key) async {
  try {
    final localPath = await getApplicationDocumentsDirectory();
    final filePath = '$localPath/$key';

    final result = await Amplify.Storage.downloadFile(
      key: "/100/$key",
      local: File(filePath),
    );
  } catch (e) {
    print('Error downloading file [$key] : $e');
  }
}

然后我跑:

  await configureAmplify();
  await downloadFromS3('gif1.gif');

我的存储桶结构如下:myBucket/100/gif1.gif。

我已经被困在这个问题上有一段时间了,我唯一可以假设的问题是,在错误代码中你可以看到一个 public 前缀“public//100/gif1.gif”。我没有,我尝试创建一个文件夹“public”,例如 myBucket/public/folder100/file。然而,这也没有真正起作用。

怎么了?

flutter amazon-s3 aws-amplify flutter-aws-amplify
1个回答
0
投票

看来问题可能与您用于下载文件的密钥有关。当您使用 Amplify 上传或列出 S3 存储桶中的对象时,它通常会为密钥添加前缀,例如“公共”、“私有”或“受保护”,具体取决于您在上传期间指定的访问级别。这可以解释为什么您在错误消息中看到“public //100/gif1.gif”。

您可能想研究一下这个堆栈问题,看看是否有帮助

如何在执行 S3 操作时阻止 aws-amplify 在 url 中附加级别和identityPoolId

还要验证 S3 存储桶中文件的确切密钥。您可以通过使用 AWS S3 控制台或 AWS CLI 列出存储桶中的对象来执行此操作。

© www.soinside.com 2019 - 2024. All rights reserved.