From 49fc475f9f18173a49e155af1f4ce59d2f3dc819 Mon Sep 17 00:00:00 2001 From: Xhofe Date: Wed, 30 Mar 2022 00:18:00 +0800 Subject: [PATCH] feat(s3): create placeholder file for mkdir --- drivers/s3/driver.go | 19 +++++++++++++++++-- drivers/s3/s3.go | 4 ++-- drivers/s3/util.go | 10 ++++++++++ 3 files changed, 29 insertions(+), 4 deletions(-) create mode 100644 drivers/s3/util.go diff --git a/drivers/s3/driver.go b/drivers/s3/driver.go index 390ca08a..8c5735ba 100644 --- a/drivers/s3/driver.go +++ b/drivers/s3/driver.go @@ -1,6 +1,7 @@ package s3 import ( + "bytes" "fmt" "github.com/Xhofe/alist/conf" "github.com/Xhofe/alist/drivers/base" @@ -9,6 +10,7 @@ import ( "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3manager" log "github.com/sirupsen/logrus" + "io/ioutil" "net/url" "path/filepath" "time" @@ -78,6 +80,7 @@ func (driver S3) Items() []base.Item { Label: "placeholder filename", Type: base.TypeString, Description: "default empty string", + Default: defaultPlaceholderName, }, { Name: "bool_1", @@ -213,8 +216,19 @@ func (driver S3) Preview(path string, account *model.Account) (interface{}, erro } func (driver S3) MakeDir(path string, account *model.Account) error { - // not support, default as success - return nil + // not support, generate a placeholder file + _, err := driver.File(path, account) + // exist + if err != base.ErrPathNotFound { + return nil + } + return driver.Upload(&model.FileStream{ + File: ioutil.NopCloser(bytes.NewReader([]byte{})), + Size: 0, + ParentPath: path, + Name: getPlaceholderName(account.Zone), + MIMEType: "application/octet-stream", + }, account) } func (driver S3) Move(src string, dst string, account *model.Account) error { @@ -277,6 +291,7 @@ func (driver S3) Upload(file *model.FileStream, account *model.Account) error { } uploader := s3manager.NewUploader(s) key := driver.GetKey(utils.Join(file.ParentPath, file.GetFileName()), account, false) + log.Debugln("key:", key) input := &s3manager.UploadInput{ Bucket: &account.Bucket, Key: &key, diff --git a/drivers/s3/s3.go b/drivers/s3/s3.go index 98459218..165f7d0a 100644 --- a/drivers/s3/s3.go +++ b/drivers/s3/s3.go @@ -88,7 +88,7 @@ func (driver S3) List(prefix string, account *model.Account) ([]model.File, erro } for _, object := range listObjectsResult.Contents { name := utils.Base(*object.Key) - if name == account.Zone { + if name == getPlaceholderName(account.Zone) { continue } file := model.File{ @@ -152,7 +152,7 @@ func (driver S3) ListV2(prefix string, account *model.Account) ([]model.File, er } for _, object := range listObjectsResult.Contents { name := utils.Base(*object.Key) - if name == account.Zone { + if name == getPlaceholderName(account.Zone) { continue } file := model.File{ diff --git a/drivers/s3/util.go b/drivers/s3/util.go new file mode 100644 index 00000000..a4136d63 --- /dev/null +++ b/drivers/s3/util.go @@ -0,0 +1,10 @@ +package s3 + +var defaultPlaceholderName = ".placeholder" + +func getPlaceholderName(placeholder string) string { + if placeholder == "" { + return defaultPlaceholderName + } + return placeholder +}