【问题标题】:AWS S3 uploaded files not showingAWS S3 上传的文件未显示
【发布时间】:2021-11-04 16:59:53
【问题描述】:

我正在使用 golang sdk 将文件上传到亚马逊 S3 上的存储桶。响应没有错误并且文件已成功上传。我的问题是当我在上传新的.jpg 文件的同一区域中列出存储桶的对象时。我得到相同的文件列表,但没有将新文件添加到存储桶中。我不知道我做错了什么。这是我用来列出存储桶内对象的代码。

input := &s3.ListObjectsInput{
    Bucket: aws.String("Bucket Name"),
}
result2, err := svc.ListObjects(input)
if err != nil {
    if aerr, ok := err.(awserr.Error); ok {
        switch aerr.Code() {
        case s3.ErrCodeNoSuchBucket:
            fmt.Println(s3.ErrCodeNoSuchBucket, aerr.Error())
        default:
            fmt.Println(aerr.Error())
        }
    } else {
        // Print the error, cast err to awserr.Error to get the Code and
        // Message from an error.
        fmt.Println(err.Error())
    }
    return
}
log.Println("Bucket List", result2)

【问题讨论】:

  • 它在 AWS 控制台中显示什么?
  • 三重检查bucket名称在上传和下载时是否相同。
  • @CharlieFish 我无法访问 AWS 控制台。我只有与 sdk 一起使用的访问密钥
  • @Himanshu 我认为它会引发错误。但是你确定你有上传和获取文件的权限吗?有时,如果您没有正确设置这些权限,这些权限可能会很奇怪并且会产生意想不到的结果。
  • @CharlieFish 是的,我在上传新对象之前列出了对象,然后再次列出了对象,但没有看到任何变化

标签: amazon-web-services go amazon-s3


【解决方案1】:

s3 最终是一致的,并且可能不会显示最近写入列表中的对象,即使来自同一区域:

Amazon S3 通过跨平台复制数据实现高可用性 亚马逊数据中心内的多台服务器。如果 PUT 请求是 成功,您的数据将被安全存储。然而,有关信息 更改必须跨 Amazon S3 复制,这可能需要一些时间,并且 因此您可能会观察到以下行为:

一个进程将一个新对象写入 Amazon S3 并立即列出键 在它的桶内。直到更改完全传播,对象 可能不会出现在列表中。

进程替换现有对象并立即尝试读取 它。在更改完全传播之前,Amazon S3 可能会返回 之前的数据。

进程删除现有对象并立即尝试读取 它。在删除完全传播之前,Amazon S3 可能会返回 删除数据。

进程删除现有对象并立即列出其中的键 它的桶。在删除完全传播之前,Amazon S3 可能 列出已删除的对象。

S3 developer guide

有一个轮询 Go AWS API 调用“func (*S3) WaitUntilObjectExists”,它一直在寻找文件,直到它出现或发生超时

更新 s3 is now strongly consistent 感谢@Tensiba 指出这一点!

Amazon S3 为 PUT 和 在所有 AWS 中对您的 Amazon S3 存储桶中的对象的 DELETE 请求 地区。此行为也适用于对新对象的写入 作为覆盖现有对象的 PUT 请求和 DELETE 请求。 此外,Amazon S3 Select 上的读取操作、Amazon S3 访问 控制列表 (ACL)、Amazon S3 对象标签和对象元数据(用于 例如,HEAD 对象)是强一致的。

【讨论】:

  • 这是某种权限问题,因为当我尝试将文件上传到另一个存储桶中时,它会返回上传文件的信息,包括 aws s3 上的位置。当我尝试列出该存储桶中的对象时,它会显示带有新文件的更新列表。
  • 但是如果您有权限错误,上传脚本肯定会抛出错误吗?
  • 不知道为什么上传文件时没有报错。但是现在我的问题通过使用另一个存储桶解决了。
  • 什么是达到一致性的合理时间?我想严格来说这是某种统计分布,所以没有简单的答案。我在写完 10 到 15 秒后看到不存在的对象,发生这种情况的可能性有多大(因此)?
  • 仅供参考,自 2020 年 12 月以来,S3 现在是强一致的,不再是最终一致的:aws.amazon.com/blogs/aws/…
猜你喜欢
  • 2020-09-09
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-24
  • 2021-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多