Skip to content

Commit 1af9f40

Browse files
committed
fix(s3): remove folder recursively
1 parent 0d012f8 commit 1af9f40

File tree

2 files changed

+37
-11
lines changed

2 files changed

+37
-11
lines changed

drivers/s3/driver.go

+3-6
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,10 @@ func (d *S3) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
130130
}
131131

132132
func (d *S3) Remove(ctx context.Context, obj model.Obj) error {
133-
key := getKey(obj.GetPath(), obj.IsDir())
134-
input := &s3.DeleteObjectInput{
135-
Bucket: &d.Bucket,
136-
Key: &key,
133+
if obj.IsDir() {
134+
return d.removeDir(ctx, obj.GetPath())
137135
}
138-
_, err := d.client.DeleteObject(input)
139-
return err
136+
return d.removeFile(obj.GetPath())
140137
}
141138

142139
func (d *S3) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error {

drivers/s3/util.go

+34-5
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,11 @@ func getKey(path string, dir bool) string {
5252
return path
5353
}
5454

55-
var defaultPlaceholderName = ".placeholder"
56-
55+
// var defaultPlaceholderName = ".placeholder"
5756
func getPlaceholderName(placeholder string) string {
58-
if placeholder == "" {
59-
return defaultPlaceholderName
60-
}
57+
//if placeholder == "" {
58+
// return defaultPlaceholderName
59+
//}
6160
return placeholder
6261
}
6362

@@ -205,3 +204,33 @@ func (d *S3) copyDir(ctx context.Context, src string, dst string) error {
205204
}
206205
return nil
207206
}
207+
208+
func (d *S3) removeDir(ctx context.Context, src string) error {
209+
objs, err := op.List(ctx, d, src, model.ListArgs{})
210+
if err != nil {
211+
return err
212+
}
213+
for _, obj := range objs {
214+
cSrc := path.Join(src, obj.GetName())
215+
if obj.IsDir() {
216+
err = d.removeDir(ctx, cSrc)
217+
} else {
218+
err = d.removeFile(cSrc)
219+
}
220+
if err != nil {
221+
return err
222+
}
223+
}
224+
_ = d.removeFile(path.Join(src, getPlaceholderName(d.Placeholder)))
225+
return nil
226+
}
227+
228+
func (d *S3) removeFile(src string) error {
229+
key := getKey(src, true)
230+
input := &s3.DeleteObjectInput{
231+
Bucket: &d.Bucket,
232+
Key: &key,
233+
}
234+
_, err := d.client.DeleteObject(input)
235+
return err
236+
}

0 commit comments

Comments
 (0)