From 939c9cd5acde04b2f99e94258080071f381e4aa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=AE=E5=87=89?= <927625802@qq.com> Date: Fri, 31 Dec 2021 14:05:35 +0800 Subject: [PATCH] :construction: check upload file --- drivers/alidrive/driver.go | 3 +++ drivers/all.go | 24 ++++++++++++++++++++++++ drivers/base/driver.go | 11 ++--------- drivers/base/types.go | 1 + drivers/ftp/driver.go | 3 +++ drivers/google/driver.go | 3 +++ drivers/native/driver.go | 3 +++ drivers/onedrive/driver.go | 3 +++ drivers/s3/driver.go | 3 +++ drivers/shandian/driver.go | 3 +++ drivers/webdav/driver.go | 3 +++ server/controllers/setting.go | 13 +++++++++---- 12 files changed, 60 insertions(+), 13 deletions(-) diff --git a/drivers/alidrive/driver.go b/drivers/alidrive/driver.go index fa43e11f..f5f5c052 100644 --- a/drivers/alidrive/driver.go +++ b/drivers/alidrive/driver.go @@ -364,6 +364,9 @@ type UploadResp struct { } func (driver AliDrive) Upload(file *model.FileStream, account *model.Account) error { + if file == nil { + return base.ErrEmptyFile + } const DEFAULT uint64 = 10485760 var count = int64(math.Ceil(float64(file.GetSize()) / float64(DEFAULT))) var finish uint64 = 0 diff --git a/drivers/all.go b/drivers/all.go index fd12981f..3a32dcf2 100644 --- a/drivers/all.go +++ b/drivers/all.go @@ -5,6 +5,7 @@ import ( _ "github.com/Xhofe/alist/drivers/189" _ "github.com/Xhofe/alist/drivers/alidrive" _ "github.com/Xhofe/alist/drivers/alist" + "github.com/Xhofe/alist/drivers/base" _ "github.com/Xhofe/alist/drivers/ftp" _ "github.com/Xhofe/alist/drivers/google" _ "github.com/Xhofe/alist/drivers/lanzou" @@ -14,4 +15,27 @@ import ( _ "github.com/Xhofe/alist/drivers/s3" _ "github.com/Xhofe/alist/drivers/shandian" _ "github.com/Xhofe/alist/drivers/webdav" + log "github.com/sirupsen/logrus" + "strings" ) + +var NoCors string +var NoUpload string + +func GetConfig() { + for k, v := range base.GetDriversMap() { + if v.Config().NoCors { + NoCors += k + "," + } + if v.Upload(nil, nil) != base.ErrEmptyFile { + NoUpload += k + "," + } + } + NoCors = strings.Trim(NoCors, ",") + NoUpload = strings.Trim(NoUpload, ",") +} + +func init() { + log.Debug("all init") + GetConfig() +} diff --git a/drivers/base/driver.go b/drivers/base/driver.go index 6a703d31..6fa3bd28 100644 --- a/drivers/base/driver.go +++ b/drivers/base/driver.go @@ -6,7 +6,6 @@ import ( "github.com/go-resty/resty/v2" log "github.com/sirupsen/logrus" "net/http" - "strings" ) type DriverConfig struct { @@ -78,14 +77,8 @@ func GetDriver(name string) (driver Driver, ok bool) { return } -func GetNoCors() string { - res := make([]string, 0) - for k, v := range driversMap { - if v.Config().NoCors { - res = append(res, k) - } - } - return strings.Join(res, ",") +func GetDriversMap() map[string]Driver { + return driversMap } func GetDrivers() map[string][]Item { diff --git a/drivers/base/types.go b/drivers/base/types.go index b59e3070..f0e0521a 100644 --- a/drivers/base/types.go +++ b/drivers/base/types.go @@ -11,6 +11,7 @@ var ( ErrNotImplement = errors.New("not implement") ErrNotSupport = errors.New("not support") ErrNotFolder = errors.New("not a folder") + ErrEmptyFile = errors.New("empty file") ) const ( diff --git a/drivers/ftp/driver.go b/drivers/ftp/driver.go index 9e03efba..e39f7fa6 100644 --- a/drivers/ftp/driver.go +++ b/drivers/ftp/driver.go @@ -240,6 +240,9 @@ func (driver FTP) Delete(path string, account *model.Account) error { } func (driver FTP) Upload(file *model.FileStream, account *model.Account) error { + if file == nil { + return base.ErrEmptyFile + } realPath := utils.Join(account.RootFolder, file.ParentPath, file.Name) conn, err := driver.Login(account) if err != nil { diff --git a/drivers/google/driver.go b/drivers/google/driver.go index 3035f527..50559304 100644 --- a/drivers/google/driver.go +++ b/drivers/google/driver.go @@ -250,6 +250,9 @@ func (driver GoogleDrive) Delete(path string, account *model.Account) error { } func (driver GoogleDrive) Upload(file *model.FileStream, account *model.Account) error { + if file == nil { + return base.ErrEmptyFile + } parentFile, err := driver.File(file.ParentPath, account) if err != nil { return err diff --git a/drivers/native/driver.go b/drivers/native/driver.go index 6dafe00f..88e82b06 100644 --- a/drivers/native/driver.go +++ b/drivers/native/driver.go @@ -196,6 +196,9 @@ func (driver Native) Delete(path string, account *model.Account) error { } func (driver Native) Upload(file *model.FileStream, account *model.Account) error { + if file == nil { + return base.ErrEmptyFile + } fullPath := filepath.Join(account.RootFolder, file.ParentPath, file.Name) _, err := driver.File(filepath.Join(file.ParentPath, file.Name), account) if err == nil { diff --git a/drivers/onedrive/driver.go b/drivers/onedrive/driver.go index e96721f2..dcb25659 100644 --- a/drivers/onedrive/driver.go +++ b/drivers/onedrive/driver.go @@ -280,6 +280,9 @@ func (driver Onedrive) Delete(path string, account *model.Account) error { } func (driver Onedrive) Upload(file *model.FileStream, account *model.Account) error { + if file == nil { + return base.ErrEmptyFile + } var err error if file.GetSize() <= 4*1024*1024 { err = driver.UploadSmall(file, account) diff --git a/drivers/s3/driver.go b/drivers/s3/driver.go index 15f682fd..cc1b9223 100644 --- a/drivers/s3/driver.go +++ b/drivers/s3/driver.go @@ -232,6 +232,9 @@ func (driver S3) Delete(path string, account *model.Account) error { } func (driver S3) Upload(file *model.FileStream, account *model.Account) error { + if file == nil { + return base.ErrEmptyFile + } s, ok := sessionsMap[account.Name] if !ok { return fmt.Errorf("can't find [%s] session", account.Name) diff --git a/drivers/shandian/driver.go b/drivers/shandian/driver.go index 11cd41bc..ea16d0db 100644 --- a/drivers/shandian/driver.go +++ b/drivers/shandian/driver.go @@ -227,6 +227,9 @@ func (driver Shandian) Delete(path string, account *model.Account) error { } func (driver Shandian) Upload(file *model.FileStream, account *model.Account) error { + if file == nil { + return base.ErrEmptyFile + } parentFile, err := driver.File(file.ParentPath, account) if err != nil { return err diff --git a/drivers/webdav/driver.go b/drivers/webdav/driver.go index 6908762e..c01857ba 100644 --- a/drivers/webdav/driver.go +++ b/drivers/webdav/driver.go @@ -182,6 +182,9 @@ func (driver WebDav) Delete(path string, account *model.Account) error { } func (driver WebDav) Upload(file *model.FileStream, account *model.Account) error { + if file == nil { + return base.ErrEmptyFile + } c := driver.NewClient(account) path := utils.Join(file.ParentPath, file.Name) err := c.WriteStream(driver.WebDavPath(path), file, 0644) diff --git a/server/controllers/setting.go b/server/controllers/setting.go index 19b2fe17..2c61723d 100644 --- a/server/controllers/setting.go +++ b/server/controllers/setting.go @@ -1,7 +1,7 @@ package controllers import ( - "github.com/Xhofe/alist/drivers/base" + "github.com/Xhofe/alist/drivers" "github.com/Xhofe/alist/model" "github.com/Xhofe/alist/server/common" "github.com/gin-gonic/gin" @@ -47,12 +47,17 @@ func GetSettingsPublic(c *gin.Context) { common.ErrorResp(c, err, 400) return } - settings = append(settings, model.SettingItem{ + settings = append(settings, []model.SettingItem{{ Key: "no cors", - Value: base.GetNoCors(), + Value: drivers.NoCors, Description: "", Type: "string", - }) + }, { + Key: "no upload", + Value: drivers.NoUpload, + Description: "", + Type: "string", + }}...) common.SuccessResp(c, settings) }