mirror of https://github.com/Xhofe/alist
fix(s3): remove folder recursively
parent
0d012f85cb
commit
1af9f4061e
|
@ -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 {
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue