首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未显示亚马逊网络服务S3上传的文件

未显示亚马逊网络服务S3上传的文件
EN

Stack Overflow用户
提问于 2018-07-19 02:13:17
回答 1查看 13.1K关注 0票数 4

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

代码语言:javascript
复制
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)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 22:25:36

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

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

一个进程将一个新对象写入亚马逊S3,并立即在其存储桶中列出关键字。在完全传播更改之前,该对象可能不会出现在列表中。

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

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

一个进程删除一个已存在的对象,并立即列出其存储桶中的键。在删除被完全传播之前,亚马逊S3可能会列出已删除的对象。

请参阅S3 developer guide

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

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

亚马逊S3为所有区域的亚马逊S3存储桶中对象的PUT和DELETE请求提供了强大的写后读一致性。此行为既适用于对新对象的写入,也适用于覆盖现有对象的PUT请求和DELETE请求。此外,对亚马逊S3精选、亚马逊S3访问控制列表(ACL)、亚马逊S3对象标签和对象元数据(例如,头对象)的读取操作具有很强的一致性。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51408511

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档