From 1afc750dae00ef557f8bce8d16ecac39b09f6a97 Mon Sep 17 00:00:00 2001 From: HFO4 <912394456@qq.com> Date: Tue, 28 Apr 2020 10:47:40 +0800 Subject: [PATCH] Modify: create folder if not exist while importing files --- pkg/filesystem/driver/oss/handler.go | 40 +++++++++++++++++++++++++--- pkg/task/import.go | 10 +++---- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/pkg/filesystem/driver/oss/handler.go b/pkg/filesystem/driver/oss/handler.go index a5e281c..da00fc0 100644 --- a/pkg/filesystem/driver/oss/handler.go +++ b/pkg/filesystem/driver/oss/handler.go @@ -18,6 +18,7 @@ import ( "io" "net/url" "path" + "strings" "time" ) @@ -42,10 +43,6 @@ type Driver struct { HTTPClient request.Client } -func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { - panic("implement me") -} - type key int const ( @@ -103,6 +100,41 @@ func (handler *Driver) InitOSSClient() error { return nil } +func (handler Driver) List(ctx context.Context, path string, recursive bool) ([]response.Object, error) { + // 初始化客户端 + if err := handler.InitOSSClient(); err != nil { + return nil, err + } + + // 列取文件 + options := []oss.Option{ + oss.Prefix(strings.TrimPrefix(path, "/")), + } + if recursive { + options = append(options, oss.Delimiter("/")) + } + listRes, err := handler.bucket.ListObjects(options...) + if err != nil { + return nil, err + } + + // 处理列取结果 + res := make([]response.Object, len(listRes.CommonPrefixes)+len(listRes.Objects)) + // 处理目录 + //for _,object := range listRes.CommonPrefixes{ + // res = append(res,response.Object{ + // Name: "", + // RelativePath: "", + // Source: "", + // Size: 0, + // IsDir: false, + // LastModify: time.Time{}, + // }) + //} + + return res, err +} + // Get 获取文件 func (handler Driver) Get(ctx context.Context, path string) (response.RSCloser, error) { // 通过VersionID禁止缓存 diff --git a/pkg/task/import.go b/pkg/task/import.go index b4f1927..bc08c42 100644 --- a/pkg/task/import.go +++ b/pkg/task/import.go @@ -146,13 +146,13 @@ func (job *ImportTask) Do() { if parent, ok := pathCache[virtualPath]; ok { parentFolder = parent } else { - if exist, folder := fs.IsPathExist(virtualPath); exist { - parentFolder = folder - } else { - util.Log().Warning("导入任务无法创插入文件[%s], 父目录不存在", - object.RelativePath) + folder, err := fs.CreateDirectory(context.Background(), virtualPath) + if err != nil { + util.Log().Warning("导入任务无法创建用户目录[%s], %s", + virtualPath, err) continue } + parentFolder = folder } // 插入文件记录 -- GitLab