package service import ( "net/http" "net/url" "strings" ) // normalizeCloudPlayTarget 把存库的云盘播放 URL 规范化为相对路径。 // // STRMURL 是扫描时根据当时的 server_url/请求地址生成并固化进数据库的。 // 在 Windows 开发机上扫描、再部署到 Docker(或更换了内网 IP/域名)后, // 这些绝对 URL 会指向已失效的旧地址,第三方播放器跟随 302 就会拿到 // 连接失败/404。这里只要能从 URL 中解析出 provider+ref,就重建为相对 // /api/cloud/play 路径,由 absoluteInternalRedirect 基于「当前请求」补全 // host,从而对历史脏数据免疫。 func normalizeCloudPlayTarget(raw string) string { typ, ref, ok := parseCloudMediaPlaybackURL(raw) if !ok { return raw } return BuildRelativeCloudPlayURL(typ, ref) } // BuildRelativeCloudPlayURL 构造相对的云盘播放 API 路径。 func BuildRelativeCloudPlayURL(typ, ref string) string { return "/api/cloud/play/" + url.PathEscape(strings.TrimSpace(typ)) + "?" + url.Values{"ref": []string{ref}}.Encode() } // withAuthToken propagates the caller's auth token onto an internal redirect // target. A browser