commits
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"strings"
|
||||
|
||||
"server/models"
|
||||
@@ -21,6 +22,49 @@ func PublicRequestBaseURL(c *beego.Controller) (scheme, host string) {
|
||||
return scheme, host
|
||||
}
|
||||
|
||||
// ResolveSoftwareDownloadURL 优先使用自定义 download_url;否则根据 file_id 读附件 src 拼完整 URL
|
||||
func ResolveSoftwareDownloadURLs(scheme, host string, downloadURLs *string) map[string]string {
|
||||
result := map[string]string{}
|
||||
if downloadURLs == nil || strings.TrimSpace(*downloadURLs) == "" {
|
||||
return result
|
||||
}
|
||||
raw := strings.TrimSpace(*downloadURLs)
|
||||
var values map[string]string
|
||||
if err := json.Unmarshal([]byte(raw), &values); err != nil {
|
||||
return result
|
||||
}
|
||||
for k, v := range values {
|
||||
platform := strings.ToLower(strings.TrimSpace(k))
|
||||
url := strings.TrimSpace(v)
|
||||
if platform == "" || url == "" {
|
||||
continue
|
||||
}
|
||||
result[platform] = ResolvePublicURL(scheme, host, url)
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// ResolvePublicURL 把相对路径拼成公开 URL;http(s) 地址原样返回。
|
||||
func ResolvePublicURL(scheme, host, src string) string {
|
||||
src = strings.TrimSpace(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
|
||||
}
|
||||
|
||||
// ResolveSoftwareDownloadURL 优先使用自定义 download_url;否则根据 file_id 读附件 src 拼完整 URL
|
||||
func ResolveSoftwareDownloadURL(scheme, host string, downloadURL *string, fileID *uint64) string {
|
||||
if downloadURL != nil {
|
||||
@@ -40,21 +84,5 @@ func ResolveSoftwareDownloadURL(scheme, host string, downloadURL *string, fileID
|
||||
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
|
||||
return ResolvePublicURL(scheme, host, f.Src)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user