我使用以下“go”代码 (Lambda) 将文件“Sample.txt”从一个账户的 S3 存储桶复制到另一个账户的 S3 存储桶。它按预期工作,即它从源存储桶复制“Sample.txt”并在目标存储桶中上传“NewSample.txt”。但是,我无法将目标存储桶中的 'NewSample.txt' 文件设为public。因此,我无法打开/下载该文件。这是因为目标存储桶中“NewSample.txt”文件的所有者仍与源存储桶中“Sample.txt”文件的所有者相同。如果我手动在目标存储桶中上传另一个文件,我可以看到新文件有不同的所有者。package mainimport ( "fmt" "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/aws/awserr" "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3")// main commentfunc main() { svc := s3.New(session.New()) input := &s3.CopyObjectInput{ Bucket: aws.String("target-bucket"), CopySource: aws.String("/source-bucket/Sample.txt"), Key: aws.String("NewSample.txt"), } result, err := svc.CopyObject(input) if err != nil { if aerr, ok := err.(awserr.Error); ok { switch aerr.Code() { case s3.ErrCodeObjectNotInActiveTierError: fmt.Println(s3.ErrCodeObjectNotInActiveTierError, aerr.Error()) default: fmt.Println(aerr.Error()) } } else { fmt.Println(err.Error()) } return } fmt.Println(result)}
1 回答

忽然笑
TA贡献1806条经验 获得超5个赞
我通过添加 ACL 解决了这个问题,如下所示:
input := &s3.CopyObjectInput{
Bucket: aws.String("target-bucket"),
CopySource: aws.String("/source-bucket/Sample.txt"),
Key: aws.String("NewSample.txt"),
ACL: aws.String("bucket-owner-full-control"),
}
- 1 回答
- 0 关注
- 141 浏览
添加回答
举报
0/150
提交
取消