【发布时间】:2021-08-26 22:31:52
【问题描述】:
我正在使用 GoLang 中的 AWS S3 开发工具包,上传和下载到各种存储桶。我想知道是否有更简单的方法可以将结构或对象直接上传到存储桶?
我有一个表示事件的结构:
type Event struct {
ID string
ProcessID string
TxnID string
Inputs map[string]interface{}
}
我想上传到 S3 存储桶。但我在文档中找到的代码仅适用于上传字符串。
func Save(client S3Client, T interface{}, key string) bool {
svc := client.S3clientObject
input := &s3.PutObjectInput{
Body: aws.ReadSeekCloser(strings.NewReader("testing this one")),
Bucket: aws.String(GetS3Bucket()),
Key: aws.String(GetObjectKey(T, key)),
Metadata: map[string]*string{
"metadata1": aws.String("value1"),
"metadata2": aws.String("value2"),
},
}
这成功地将基本文件上传到 S3 存储桶,打开该存储桶时仅显示“正在测试这个”。有没有办法上传到存储桶,以便它上传一个对象而不仅仅是一个字符串值??
感谢任何帮助,因为我是 Go 和 S3 的新手。
编辑
这是我用于 Get 函数的代码:
func GetIt(client S3Client, T interface{}, key string) interface{} {
svc := client.S3clientObject
s3Key := GetObjectKey(T, key)
resp, err := svc.GetObject(&s3.GetObjectInput{
Bucket: aws.String(GetS3Bucket()),
Key: aws.String(s3Key),
})
if err != nil {
fmt.Println(err)
return err
}
result := json.NewDecoder(resp.Body).Decode(&T)
fmt.Println(result)
return json.NewDecoder(resp.Body).Decode(&T)
}
func main() {
client := b.CreateS3Client()
event := b.CreateEvent()
GetIt(client, event, key)
}
【问题讨论】:
标签: amazon-web-services go amazon-s3