我正在开发的应用程序目前使用适用于 PHP 的 Amazon S3 Stream Wrapper 将日志消息写入 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);
最佳答案
正如@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)
}
关于go - 在 Golang 中写入/附加到 S3 存储桶,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42681181/