fix(s3): remove folder recursively

pull/1831/head
Noah Hsu 2022-09-16 21:25:55 +08:00
parent 0d012f85cb
commit 1af9f4061e
2 changed files with 37 additions and 11 deletions

View File

@ -130,13 +130,10 @@ func (d *S3) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
} }
func (d *S3) Remove(ctx context.Context, obj model.Obj) error { func (d *S3) Remove(ctx context.Context, obj model.Obj) error {
key := getKey(obj.GetPath(), obj.IsDir()) if obj.IsDir() {
input := &s3.DeleteObjectInput{ return d.removeDir(ctx, obj.GetPath())
Bucket: &d.Bucket,
Key: &key,
} }
_, err := d.client.DeleteObject(input) return d.removeFile(obj.GetPath())
return err
} }
func (d *S3) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { func (d *S3) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error {

View File

@ -52,12 +52,11 @@ func getKey(path string, dir bool) string {
return path return path
} }
var defaultPlaceholderName = ".placeholder" // var defaultPlaceholderName = ".placeholder"
func getPlaceholderName(placeholder string) string { func getPlaceholderName(placeholder string) string {
if placeholder == "" { //if placeholder == "" {
return defaultPlaceholderName // return defaultPlaceholderName
} //}
return placeholder return placeholder
} }
@ -205,3 +204,33 @@ func (d *S3) copyDir(ctx context.Context, src string, dst string) error {
} }
return nil return nil
} }
func (d *S3) removeDir(ctx context.Context, src string) error {
objs, err := op.List(ctx, d, src, model.ListArgs{})
if err != nil {
return err
}
for _, obj := range objs {
cSrc := path.Join(src, obj.GetName())
if obj.IsDir() {
err = d.removeDir(ctx, cSrc)
} else {
err = d.removeFile(cSrc)
}
if err != nil {
return err
}
}
_ = d.removeFile(path.Join(src, getPlaceholderName(d.Placeholder)))
return nil
}
func (d *S3) removeFile(src string) error {
key := getKey(src, true)
input := &s3.DeleteObjectInput{
Bucket: &d.Bucket,
Key: &key,
}
_, err := d.client.DeleteObject(input)
return err
}