diff --git a/pkg/filesystem/driver/cos/handler.go b/pkg/filesystem/driver/cos/handler.go index 18915e2..0a9acb9 100644 --- a/pkg/filesystem/driver/cos/handler.go +++ b/pkg/filesystem/driver/cos/handler.go @@ -46,7 +46,7 @@ type Driver struct { HTTPClient request.Client } -func (handler Driver) List(ctx context.Context, path string) ([]response.Object, error) { +func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { panic("implement me") } diff --git a/pkg/filesystem/driver/local/handler.go b/pkg/filesystem/driver/local/handler.go index 7d1a93c..360e9c2 100644 --- a/pkg/filesystem/driver/local/handler.go +++ b/pkg/filesystem/driver/local/handler.go @@ -24,7 +24,7 @@ type Driver struct { } // List 递归列取给定物理路径下所有文件 -func (handler Driver) List(ctx context.Context, path string) ([]response.Object, error) { +func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { var res []response.Object // 取得起始路径 @@ -58,6 +58,11 @@ func (handler Driver) List(ctx context.Context, path string) ([]response.Object, LastModify: info.ModTime(), }) + // 如果非递归,则不步入目录 + if !recursive && info.IsDir() { + return filepath.SkipDir + } + return nil }) diff --git a/pkg/filesystem/driver/local/handler_test.go b/pkg/filesystem/driver/local/handler_test.go index fedddd3..e0c3ddb 100644 --- a/pkg/filesystem/driver/local/handler_test.go +++ b/pkg/filesystem/driver/local/handler_test.go @@ -2,7 +2,6 @@ package local import ( "context" - "fmt" model "github.com/HFO4/cloudreve/models" "github.com/HFO4/cloudreve/pkg/auth" "github.com/HFO4/cloudreve/pkg/conf" @@ -233,10 +232,32 @@ func TestHandler_Token(t *testing.T) { } func TestDriver_List(t *testing.T) { - //asserts := assert.New(t) + asserts := assert.New(t) handler := Driver{} ctx := context.Background() - res, err := handler.List(ctx, "KKV") - fmt.Println(res, err) + // 创建测试目录结构 + for _, path := range []string{ + "test/TestDriver_List/parent.txt", + "test/TestDriver_List/parent_folder2/sub2.txt", + "test/TestDriver_List/parent_folder1/sub_folder/sub1.txt", + "test/TestDriver_List/parent_folder1/sub_folder/sub2.txt", + } { + f, _ := util.CreatNestedFile(util.RelativePath(path)) + f.Close() + } + + // 非递归列出 + { + res, err := handler.List(ctx, "test/TestDriver_List", false) + asserts.NoError(err) + asserts.Len(res, 3) + } + + // 递归列出 + { + res, err := handler.List(ctx, "test/TestDriver_List", true) + asserts.NoError(err) + asserts.Len(res, 7) + } } diff --git a/pkg/filesystem/driver/onedrive/handler.go b/pkg/filesystem/driver/onedrive/handler.go index 43a2ac0..f5bd4ca 100644 --- a/pkg/filesystem/driver/onedrive/handler.go +++ b/pkg/filesystem/driver/onedrive/handler.go @@ -22,7 +22,7 @@ type Driver struct { HTTPClient request.Client } -func (handler Driver) List(ctx context.Context, path string) ([]response.Object, error) { +func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { panic("implement me") } diff --git a/pkg/filesystem/driver/oss/handler.go b/pkg/filesystem/driver/oss/handler.go index cc68cc9..a5e281c 100644 --- a/pkg/filesystem/driver/oss/handler.go +++ b/pkg/filesystem/driver/oss/handler.go @@ -42,7 +42,7 @@ type Driver struct { HTTPClient request.Client } -func (handler Driver) List(ctx context.Context, path string) ([]response.Object, error) { +func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { panic("implement me") } diff --git a/pkg/filesystem/driver/qiniu/handler.go b/pkg/filesystem/driver/qiniu/handler.go index 143882b..316b65e 100644 --- a/pkg/filesystem/driver/qiniu/handler.go +++ b/pkg/filesystem/driver/qiniu/handler.go @@ -22,7 +22,7 @@ type Driver struct { Policy *model.Policy } -func (handler Driver) List(ctx context.Context, path string) ([]response.Object, error) { +func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { panic("implement me") } diff --git a/pkg/filesystem/driver/remote/handler.go b/pkg/filesystem/driver/remote/handler.go index d342129..664855e 100644 --- a/pkg/filesystem/driver/remote/handler.go +++ b/pkg/filesystem/driver/remote/handler.go @@ -27,7 +27,7 @@ type Driver struct { AuthInstance auth.Auth } -func (handler Driver) List(ctx context.Context, path string) ([]response.Object, error) { +func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { panic("implement me") } diff --git a/pkg/filesystem/driver/upyun/handler.go b/pkg/filesystem/driver/upyun/handler.go index c531484..2b35272 100644 --- a/pkg/filesystem/driver/upyun/handler.go +++ b/pkg/filesystem/driver/upyun/handler.go @@ -40,7 +40,7 @@ type Driver struct { Policy *model.Policy } -func (handler Driver) List(ctx context.Context, path string) ([]response.Object, error) { +func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { panic("implement me") } diff --git a/pkg/filesystem/filesystem.go b/pkg/filesystem/filesystem.go index 652cdd0..3e1fac5 100644 --- a/pkg/filesystem/filesystem.go +++ b/pkg/filesystem/filesystem.go @@ -65,8 +65,10 @@ type Handler interface { // Token 获取有效期为ttl的上传凭证和签名,同时回调会话有效期为sessionTTL Token(ctx context.Context, ttl int64, callbackKey string) (serializer.UploadCredential, error) - // List 递归列取远程端path路径下文件、目录,不包含path本身,返回的对象路径以path作为起始根目录 - List(ctx context.Context, path string) ([]response.Object, error) + // List 递归列取远程端path路径下文件、目录,不包含path本身, + // 返回的对象路径以path作为起始根目录. + // recursive - 是否递归列出 + List(ctx context.Context, path string, recursive bool) ([]response.Object, error) } // FileSystem 管理文件的文件系统 diff --git a/pkg/filesystem/upload_test.go b/pkg/filesystem/upload_test.go index 4b48030..04438c4 100644 --- a/pkg/filesystem/upload_test.go +++ b/pkg/filesystem/upload_test.go @@ -26,7 +26,7 @@ type FileHeaderMock struct { testMock.Mock } -func (m FileHeaderMock) List(ctx context.Context, path string) ([]response.Object, error) { +func (m FileHeaderMock) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { panic("implement me") }