From 9147a3f058337f78ca330232f5550183d16a2e37 Mon Sep 17 00:00:00 2001 From: Darren Yu Date: Thu, 5 Mar 2026 00:28:41 +0800 Subject: [PATCH] fix: skip 0kb placeholder object as directory in file listing --- pkg/filemanager/driver/cos/cos.go | 7 ++++--- pkg/filemanager/driver/ks3/ks3.go | 3 +++ pkg/filemanager/driver/obs/obs.go | 7 ++++--- pkg/filemanager/driver/oss/oss.go | 4 ++++ pkg/filemanager/driver/qiniu/qiniu.go | 4 ++++ pkg/filemanager/driver/s3/s3.go | 4 +++- 6 files changed, 22 insertions(+), 7 deletions(-) diff --git a/pkg/filemanager/driver/cos/cos.go b/pkg/filemanager/driver/cos/cos.go index cde8cbed..1f66e7cf 100644 --- a/pkg/filemanager/driver/cos/cos.go +++ b/pkg/filemanager/driver/cos/cos.go @@ -138,7 +138,6 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. } // 是否为递归列出 - if !recursive { opt.Delimiter = "/" } @@ -172,8 +171,8 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. // 处理列取结果 res := make([]fs.PhysicalObject, 0, len(objects)+len(commons)) - // 处理目录 + // 处理目录 for _, object := range commons { rel, err := filepath.Rel(opt.Prefix, object) if err != nil { @@ -191,8 +190,10 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. onProgress(len(commons)) // 处理文件 - for _, object := range objects { + if strings.HasSuffix(object.Key, "/") && object.Size == 0 { + continue + } rel, err := filepath.Rel(opt.Prefix, object.Key) if err != nil { handler.l.Warning("Failed to get relative path: %s", err) diff --git a/pkg/filemanager/driver/ks3/ks3.go b/pkg/filemanager/driver/ks3/ks3.go index 10f190e2..4e1d71c4 100644 --- a/pkg/filemanager/driver/ks3/ks3.go +++ b/pkg/filemanager/driver/ks3/ks3.go @@ -174,6 +174,9 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. // 处理文件 for _, object := range objects { + if strings.HasSuffix(*object.Key, "/") && *object.Size == 0 { + continue + } rel, err := filepath.Rel(*opt.Prefix, *object.Key) if err != nil { continue diff --git a/pkg/filemanager/driver/obs/obs.go b/pkg/filemanager/driver/obs/obs.go index a9fc9137..97c68622 100644 --- a/pkg/filemanager/driver/obs/obs.go +++ b/pkg/filemanager/driver/obs/obs.go @@ -149,8 +149,8 @@ func (d *Driver) List(ctx context.Context, base string, onProgress driver.ListPr // 处理列取结果 res := make([]fs.PhysicalObject, 0, len(objects)+len(commons)) - // 处理目录 + // 处理目录 for _, object := range commons { rel, err := filepath.Rel(opt.Prefix, object) if err != nil { @@ -168,8 +168,10 @@ func (d *Driver) List(ctx context.Context, base string, onProgress driver.ListPr onProgress(len(commons)) // 处理文件 - for _, object := range objects { + if strings.HasSuffix(object.Key, "/") && object.Size == 0 { + continue + } rel, err := filepath.Rel(opt.Prefix, object.Key) if err != nil { d.l.Warning("Failed to get relative path: %s", err) @@ -187,7 +189,6 @@ func (d *Driver) List(ctx context.Context, base string, onProgress driver.ListPr onProgress(len(res)) return res, nil - } func (d *Driver) Put(ctx context.Context, file *fs.UploadRequest) error { diff --git a/pkg/filemanager/driver/oss/oss.go b/pkg/filemanager/driver/oss/oss.go index b6c17471..1b382533 100644 --- a/pkg/filemanager/driver/oss/oss.go +++ b/pkg/filemanager/driver/oss/oss.go @@ -192,6 +192,7 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. // 处理列取结果 res := make([]fs.PhysicalObject, 0, len(objects)+len(commons)) + // 处理目录 for _, object := range commons { rel, err := filepath.Rel(base, *object.Prefix) @@ -210,6 +211,9 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. // 处理文件 for _, object := range objects { + if strings.HasSuffix(*object.Key, "/") && object.Size == 0 { + continue + } rel, err := filepath.Rel(base, *object.Key) if err != nil { continue diff --git a/pkg/filemanager/driver/qiniu/qiniu.go b/pkg/filemanager/driver/qiniu/qiniu.go index 40ec09d7..3039f296 100644 --- a/pkg/filemanager/driver/qiniu/qiniu.go +++ b/pkg/filemanager/driver/qiniu/qiniu.go @@ -122,6 +122,7 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. // 处理列取结果 res := make([]fs.PhysicalObject, 0, len(objects)+len(commons)) + // 处理目录 for _, object := range commons { rel, err := filepath.Rel(base, object) @@ -140,6 +141,9 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. // 处理文件 for _, object := range objects { + if strings.HasSuffix(object.Key, "/") && object.Fsize == 0 { + continue + } rel, err := filepath.Rel(base, object.Key) if err != nil { continue diff --git a/pkg/filemanager/driver/s3/s3.go b/pkg/filemanager/driver/s3/s3.go index 440e2708..66898e11 100644 --- a/pkg/filemanager/driver/s3/s3.go +++ b/pkg/filemanager/driver/s3/s3.go @@ -164,6 +164,9 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. // 处理文件 for _, object := range objects { + if strings.HasSuffix(*object.Key, "/") && *object.Size == 0 { + continue + } rel, err := filepath.Rel(*opt.Prefix, *object.Key) if err != nil { continue @@ -180,7 +183,6 @@ func (handler *Driver) List(ctx context.Context, base string, onProgress driver. onProgress(len(objects)) return res, nil - } // Open 打开文件