feat: rename file only when storagePath exists
This commit is contained in:
@@ -147,3 +147,8 @@ func (a *Alist) NotSupportStream() string {
|
||||
func (a *Alist) JoinStoragePath(task types.Task) string {
|
||||
return path.Join(a.config.BasePath, task.StoragePath)
|
||||
}
|
||||
|
||||
func (a *Alist) Exists(ctx context.Context, storagePath string) bool {
|
||||
// TODO: Implement it.
|
||||
return false
|
||||
}
|
||||
|
||||
@@ -63,3 +63,11 @@ func (l *Local) Save(ctx context.Context, r io.Reader, storagePath string) error
|
||||
_, err = io.Copy(file, r)
|
||||
return err
|
||||
}
|
||||
|
||||
func (l *Local) Exists(ctx context.Context, storagePath string) bool {
|
||||
absPath, err := filepath.Abs(storagePath)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
return fileutil.IsExist(absPath)
|
||||
}
|
||||
|
||||
@@ -70,3 +70,17 @@ func (m *Minio) Save(ctx context.Context, r io.Reader, storagePath string) error
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Minio) Exists(ctx context.Context, storagePath string) bool {
|
||||
common.Log.Debugf("Checking if file exists at %s", storagePath)
|
||||
// TODO: test it.
|
||||
_, err := m.client.StatObject(ctx, m.config.BucketName, storagePath, minio.StatObjectOptions{})
|
||||
if err != nil {
|
||||
if minio.ToErrorResponse(err).Code == "NoSuchKey" {
|
||||
return false // File does not exist
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ type Storage interface {
|
||||
Name() string
|
||||
JoinStoragePath(task types.Task) string
|
||||
Save(ctx context.Context, reader io.Reader, storagePath string) error
|
||||
Exists(ctx context.Context, storagePath string) bool
|
||||
}
|
||||
|
||||
type StorageNotSupportStream interface {
|
||||
|
||||
@@ -5,4 +5,5 @@ import "errors"
|
||||
var (
|
||||
ErrFailedToCreateDirectory = errors.New("webdav: failed to create directory")
|
||||
ErrFailedToWriteFile = errors.New("webdav: failed to write file")
|
||||
ErrFailedToCheckFileExists = errors.New("webdav: failed to check if file exists")
|
||||
)
|
||||
|
||||
@@ -57,3 +57,13 @@ func (w *Webdav) Save(ctx context.Context, r io.Reader, storagePath string) erro
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (w *Webdav) Exists(ctx context.Context, storagePath string) bool {
|
||||
common.Log.Debugf("Checking if file exists at %s", storagePath)
|
||||
exists, err := w.client.Exists(ctx, storagePath)
|
||||
if err != nil {
|
||||
common.Log.Errorf("Failed to check if file exists at %s: %v", storagePath, err)
|
||||
return false
|
||||
}
|
||||
return exists
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user