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

标签 go amazon-s3

我正在开发的应用程序目前使用适用于 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/

相关文章:

go - 终端 Go 应用程序中的多行输入

go - 是什么原因导致 "panic: runtime error: invalid memory address or nil pointer dereference"?

google-app-engine - 这些 GAE 库之间有什么区别?

amazon-web-services - 如何使用 key 和 secret 访问 s3 存储桶?

grails - 运行 Grails AWS 插件时出现 ClassNotFoundException

javascript - 带有 Promise 的 AWS Javascript SDK

Go:服务器应该阻塞,直到收到来自客户端的消息

amazon-web-services - 将日志发送到AWS ElasticSearch

python - Boto3上传到S3 : cut off last few rows of data from a . csv文件

go - 支持 http 密码套件吗?