From e3e08a9b7545aed1401c6c1313f8cdc5af0ef1aa Mon Sep 17 00:00:00 2001 From: Darren Yu Date: Sun, 12 Oct 2025 10:28:40 +0800 Subject: [PATCH] feat(share): adapt to keep specified path in V3 sharing link (#2958) --- service/share/visit.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/service/share/visit.go b/service/share/visit.go index cf07622..c47f10f 100644 --- a/service/share/visit.go +++ b/service/share/visit.go @@ -2,6 +2,7 @@ package share import ( "context" + "strings" "github.com/cloudreve/Cloudreve/v4/application/dependency" "github.com/cloudreve/Cloudreve/v4/ent" @@ -25,7 +26,26 @@ type ( ) func (s *ShortLinkRedirectService) RedirectTo(c *gin.Context) string { - return routes.MasterShareLongUrl(s.ID, s.Password).String() + shareLongUrl := routes.MasterShareLongUrl(s.ID, s.Password) + + shortLinkQuery := c.Request.URL.Query() // Query in ShortLink, adapt to Cloudreve V3 + shareLongUrlQuery := shareLongUrl.Query() + + userSpecifiedPath := shortLinkQuery.Get("path") + if userSpecifiedPath != "" { + masterPath := shareLongUrlQuery.Get("path") + masterPath += "/" + strings.TrimPrefix(userSpecifiedPath, "/") + + shareLongUrlQuery.Set("path", masterPath) + } + + shortLinkQuery.Del("path") // 防止用户指定的 Path 就是空字符串 + for k, vals := range shortLinkQuery { + shareLongUrlQuery[k] = append(shareLongUrlQuery[k], vals...) + } + + shareLongUrl.RawQuery = shareLongUrlQuery.Encode() + return shareLongUrl.String() } type (