我正在 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)

}