在Golang中写入/附加到S3存储桶

时间:2017-03-08 20:20:32

标签: go amazon-s3

我正在处理的应用程序目前使用Amazon S3 Stream Wrapper for PHP来将日志消息写入S3存储桶,我需要将其移植到Golang。在Go中是否存在相同的含义? PutObject方法覆盖了所有内容,我只想追加。在PHP中,我们使用fopen()fwrite()将字符串附加到现有存储桶。我希望我能做到

os.OpenFile(filename, os.O_APPEND|os.O_WRONLY, 0600) 

但我收到一条错误消息,说该文件不存在。我尝试使用s3://https://链接到日志文件。

以下是PHP的亚马逊示例:

$stream = fopen('s3://bucket/key', 'w');
fwrite($stream, 'Hello!');
fclose($stream);

1 个答案:

答案 0 :(得分:1)

正如@Rob所提到的,S3并不支持追加操作https://forums.aws.amazon.com/message.jspa?messageID=540395

唯一的方法是下载对象并使用aws-sdk或minio(https://github.com/minio/minio)上传新对象。我想,PHP包装器在引擎盖下做同样的事情。

带有minio的样本:

s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESS-KEY-HERE", "YOUR-SECRET-KEY-HERE", true)
if err != nil {
    log.Fatalln(err)
}

reader, err := s3Client.GetObject("my-bucketname", "my-objectname")
if err != nil {
    log.Fatalln(err)
}
defer reader.Close()

// Change your data

n, err := s3Client.PutObject("my-bucketname", "my-objectname", reader, "application/octet-stream")
if err != nil {
    log.Fatalln(err)
}