go-platform/services/software_upgrade_url.go
2026-04-08 20:33:02 +08:00

61 lines
1.4 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package services
import (
"strings"
"server/models"
beego "github.com/beego/beego/v2/server/web"
)
// PublicRequestBaseURL 根据请求拼出对外访问的根(用于把 /uploads/... 拼成完整下载地址)
func PublicRequestBaseURL(c *beego.Controller) (scheme, host string) {
scheme = "http"
if c.Ctx.Request.TLS != nil {
scheme = "https"
}
if strings.EqualFold(strings.TrimSpace(c.Ctx.Request.Header.Get("X-Forwarded-Proto")), "https") {
scheme = "https"
}
host = strings.TrimSpace(c.Ctx.Request.Host)
return scheme, host
}
// ResolveSoftwareDownloadURL 优先使用自定义 download_url否则根据 file_id 读附件 src 拼完整 URL
func ResolveSoftwareDownloadURL(scheme, host string, downloadURL *string, fileID *uint64) string {
if downloadURL != nil {
u := strings.TrimSpace(*downloadURL)
if u != "" {
return u
}
}
if fileID == nil || *fileID == 0 {
return ""
}
var f models.SystemFile
err := models.Orm.QueryTable(new(models.SystemFile)).
Filter("id", *fileID).
Filter("delete_time__isnull", true).
One(&f)
if err != nil {
return ""
}
src := strings.TrimSpace(f.Src)
if src == "" {
return ""
}
if strings.HasPrefix(strings.ToLower(src), "http://") || strings.HasPrefix(strings.ToLower(src), "https://") {
return src
}
if host == "" {
return src
}
if !strings.HasPrefix(src, "/") {
src = "/" + src
}
if scheme == "" {
scheme = "http"
}
return scheme + "://" + host + src
}