diff --git a/internal/model/args.go b/internal/model/args.go index 8801a0b7..bfddc57b 100644 --- a/internal/model/args.go +++ b/internal/model/args.go @@ -25,6 +25,7 @@ type Link struct { Status int // status maybe 200 or 206, etc FilePath *string // local file, return the filepath Expiration *time.Duration // url expiration time + IPCacheKey bool // add ip to cache key //Handle func(w http.ResponseWriter, r *http.Request) error `json:"-"` // custom handler Writer WriterFunc `json:"-"` // custom writer } diff --git a/internal/op/fs.go b/internal/op/fs.go index 89ed3b3f..15384405 100644 --- a/internal/op/fs.go +++ b/internal/op/fs.go @@ -243,7 +243,7 @@ func Link(ctx context.Context, storage driver.Driver, path string, args model.Li if file.IsDir() { return nil, nil, errors.WithStack(errs.NotFile) } - key := Key(storage, path) + ":" + args.IP + key := Key(storage, path) if link, ok := linkCache.Get(key); ok { return link, file, nil } @@ -253,6 +253,9 @@ func Link(ctx context.Context, storage driver.Driver, path string, args model.Li return nil, errors.Wrapf(err, "failed get link") } if link.Expiration != nil { + if link.IPCacheKey { + key = key + ":" + args.IP + } linkCache.Set(key, link, cache.WithEx[*model.Link](*link.Expiration)) } return link, nil @@ -563,6 +566,9 @@ func Put(ctx context.Context, storage driver.Driver, dstDirPath string, file *mo err := Remove(ctx, storage, tempPath) if err != nil { return err + } else { + key := Key(storage, stdpath.Join(dstDirPath, file.GetName())) + linkCache.Del(key) } } }