如何在AWS-SDK-Go中删除S3对象?

时间:2018-02-02 12:21:48

标签: amazon-s3 aws-sdk aws-sdk-go

我想删除bucket/userIDbucket/userID

下有很多文件

我必须实施删除bucket/userID,需要使用ListObjects然后DeleteObjects。 函数ListObjects返回result.Contents[]*s3.ObjectDeleteObjects需要[]*s3.ObjectIdentifier

我无法将[]*s3.Object转换为[]*s3.ObjectIdentifier 在此代码中,错误发生invalid memory address or nil pointer dereference

type Object struct {
    _ struct{} `type:"structure"`

     ETag *string `type:"string"`
     Key *string `min:"1" type:"string"`
    LastModified *time.Time `type:"timestamp" 
    timestampFormat:"iso8601"`
    Owner *Owner `type:"structure"`
    Size *int64 `type:"integer"`
    StorageClass *string `type:"string" enum:"ObjectStorageClass"`
}

type ObjectIdentifier struct {
    _ struct{} `type:"structure"`

    Key *string `min:"1" type:"string" required:"true"`
    VersionId *string `type:"string"`
}

objects := getObjects() // return []*s3.Object
a := make([]*s3.ObjectIdentifier, len(objects))

for i, v := range objects {
        a[i].Key = v.Key
}

a[i].Key = v.Key是错误的。 如何实现删除bucket/userID

2 个答案:

答案 0 :(得分:0)

Go开发者指南有一个主题,包含代码,有关删除存储桶中的所有对象的信息:https://docs.aws.amazon.com/sdk-for-go/v1/developer-guide/s3-example-basic-bucket-operations.html#s3-examples-bucket-ops-delete-all-bucket-items

答案 1 :(得分:0)

在您的实现中,this._route.snapshot.params["id"]; 仅声明那些变量。它不会为每个结构初始化数组。结果,它将创建一个nil指针异常。

您需要在迭代中初始化所有结构:

a := make([]*s3.ObjectIdentifier, len(objects))

构造... for i, v := range objects { a[i] = &s3.ObjectIdentifier{ Key: v.Key, } } 后,您可以根据AWS Golang的文档使用[]*s3.ObjectIdentifier参数调用DeleteObjects