feat: upload progress recovery (#4987)
* feat(189pc):upload progress recovery * fix:some err * feat(baidu_netdisk,baidu_photo):upload progress recovery * feat(mopan):upload progress recovery * feat(baidu_netdisk):custom upload api
This commit is contained in:
31
drivers/base/upload.go
Normal file
31
drivers/base/upload.go
Normal file
@ -0,0 +1,31 @@
|
||||
package base
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/Xhofe/go-cache"
|
||||
"github.com/alist-org/alist/v3/internal/driver"
|
||||
)
|
||||
|
||||
// storage upload progress, for upload recovery
|
||||
var UploadStateCache = cache.NewMemCache(cache.WithShards[any](32))
|
||||
|
||||
// Save upload progress for 20 minutes
|
||||
func SaveUploadProgress(driver driver.Driver, state any, keys ...string) bool {
|
||||
return UploadStateCache.Set(
|
||||
fmt.Sprint(driver.Config().Name, "-upload-", strings.Join(keys, "-")),
|
||||
state,
|
||||
cache.WithEx[any](time.Minute*20))
|
||||
}
|
||||
|
||||
// An upload progress can only be made by one process alone,
|
||||
// so here you need to get it and then delete it.
|
||||
func GetUploadProgress[T any](driver driver.Driver, keys ...string) (state T, ok bool) {
|
||||
v, ok := UploadStateCache.GetDel(fmt.Sprint(driver.Config().Name, "-upload-", strings.Join(keys, "-")))
|
||||
if ok {
|
||||
state, ok = v.(T)
|
||||
}
|
||||
return
|
||||
}
|
Reference in New Issue
Block a user