From 0126af4de07d9711e9c2193e7b88583db78cbf46 Mon Sep 17 00:00:00 2001 From: j2rong4cn <36783515+j2rong4cn@users.noreply.github.com> Date: Sat, 15 Mar 2025 00:13:30 +0800 Subject: [PATCH] fix(crypt): premature close of MFile (#8132 close #8119) * fix(crypt): premature close of MFile * refactor --- drivers/crypt/driver.go | 5 +++-- server/common/proxy.go | 9 +++++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/crypt/driver.go b/drivers/crypt/driver.go index 59b25806..2330fb97 100644 --- a/drivers/crypt/driver.go +++ b/drivers/crypt/driver.go @@ -282,8 +282,9 @@ func (d *Crypt) Link(ctx context.Context, file model.Obj, args model.LinkArgs) ( if err != nil { return nil, err } - // 可以直接返回,读取完也不会调用Close,直到连接断开Close - return remoteLink.MFile, nil + //keep reuse same MFile and close at last. + remoteClosers.Add(remoteLink.MFile) + return io.NopCloser(remoteLink.MFile), nil } return nil, errs.NotSupport diff --git a/server/common/proxy.go b/server/common/proxy.go index 8519ed53..23360a34 100644 --- a/server/common/proxy.go +++ b/server/common/proxy.go @@ -7,6 +7,7 @@ import ( "net/http" "net/url" "os" + "strings" "github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/net" @@ -102,11 +103,15 @@ func attachHeader(w http.ResponseWriter, file model.Obj) { w.Header().Set("Etag", GetEtag(file)) } func GetEtag(file model.Obj) string { + hash := "" for _, v := range file.GetHash().Export() { - if len(v) != 0 { - return fmt.Sprintf(`"%s"`, v) + if strings.Compare(v, hash) > 0 { + hash = v } } + if len(hash) > 0 { + return fmt.Sprintf(`"%s"`, hash) + } // 参考nginx return fmt.Sprintf(`"%x-%x"`, file.ModTime().Unix(), file.GetSize()) }