feat(s3): create placeholder file for mkdir

pull/872/head
Xhofe 2022-03-30 00:18:00 +08:00
parent 83c377270e
commit 49fc475f9f
3 changed files with 29 additions and 4 deletions

View File

@ -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,9 +216,20 @@ 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
// 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 {
err := driver.Copy(src, dst, account)
@ -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,

View File

@ -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{

10
drivers/s3/util.go Normal file
View File

@ -0,0 +1,10 @@
package s3
var defaultPlaceholderName = ".placeholder"
func getPlaceholderName(placeholder string) string {
if placeholder == "" {
return defaultPlaceholderName
}
return placeholder
}