fix(crypt): premature close of MFile (#8132 close #8119)

* fix(crypt): premature close of MFile

* refactor
This commit is contained in:
j2rong4cn 2025-03-15 00:13:30 +08:00 committed by GitHub
parent 7579d44517
commit 0126af4de0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 10 additions and 4 deletions

View File

@ -282,8 +282,9 @@ func (d *Crypt) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (
if err != nil { if err != nil {
return nil, err return nil, err
} }
// 可以直接返回读取完也不会调用Close直到连接断开Close //keep reuse same MFile and close at last.
return remoteLink.MFile, nil remoteClosers.Add(remoteLink.MFile)
return io.NopCloser(remoteLink.MFile), nil
} }
return nil, errs.NotSupport return nil, errs.NotSupport

View File

@ -7,6 +7,7 @@ import (
"net/http" "net/http"
"net/url" "net/url"
"os" "os"
"strings"
"github.com/alist-org/alist/v3/internal/model" "github.com/alist-org/alist/v3/internal/model"
"github.com/alist-org/alist/v3/internal/net" "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)) w.Header().Set("Etag", GetEtag(file))
} }
func GetEtag(file model.Obj) string { func GetEtag(file model.Obj) string {
hash := ""
for _, v := range file.GetHash().Export() { for _, v := range file.GetHash().Export() {
if len(v) != 0 { if strings.Compare(v, hash) > 0 {
return fmt.Sprintf(`"%s"`, v) hash = v
} }
} }
if len(hash) > 0 {
return fmt.Sprintf(`"%s"`, hash)
}
// 参考nginx // 参考nginx
return fmt.Sprintf(`"%x-%x"`, file.ModTime().Unix(), file.GetSize()) return fmt.Sprintf(`"%x-%x"`, file.ModTime().Unix(), file.GetSize())
} }