我想从S3存储桶的指定路径中删除所有.JPEG
文件。例如,假设我在S3云服务上具有类似于以下内容的结构:
Obj1/
Obj2/
Obj3/
image_1.jpeg
...
image_N.jpeg
是否可以将Obj1/Obj2/Obj3
指定为DeleteObjectsInput's
prefix
并递归删除所有包含此类.JPEG
的{{1}}文件。
这是我的代码:
prefix
func (s3Obj S3) Delete() error {
sess := session.Must(session.NewSession(&aws.Config{
Region: aws.String(s3Obj.Region),
}))
svc := s3.New(sess)
input := &s3.DeleteObjectsInput{
Bucket: aws.String(s3Obj.Bucket),
Delete: &s3.Delete{
Objects: []*s3.ObjectIdentifier{
{
Key: aws.String(s3Obj.ItemPath),
},
},
Quiet: aws.Bool(false),
},
}
result, err := svc.DeleteObjects(input)
if err != nil {
if aerr, ok := err.(awserr.Error); ok {
switch aerr.Code() {
default:
glog.Errorf("Error occurred while trying to delete object from S3. Error message - %v", aerr.Error())
}
} else {
glog.Errorf("Error occurred while trying to delete object from S3. Error message - %v", err.Error())
}
return err
}
glog.Info(result)
return nil
}
代表上述示例中的sObj3.ItemPath
路径。由于此功能,我没有得到任何错误。我实际上收到以下消息:
Obj1/Obj2/Obj3
但是当我检查我的S3云服务时,什么也没做。我在做什么错了?
编辑
我已经更改了代码,因此我的Delete函数接受了列出Deleted: [{
Key: "Obj1/Obj2/Obj3"
}]
的对象的列表。该列表中大约有50个.JPEG文件,出于某种原因,代码遵循仅删除最后一个。我不确定为什么。
s3.ObjectIdentifier