package utils import ( "game-driver/pkg/logger" "io" "net/http" "net/url" "os" "path" "strings" ) // LinkVideo 链接视频,解析链接,网络文件会下载到临时目录并返回本地路径 func LinkVideo(link string) (local string) { if link == "" { return } u, err := url.Parse(link) if err != nil { logger.Infoln("音频 URL 解析错误: ", err) } else { if u.Scheme == "file" { local, _ = strings.CutPrefix(link, "file://") } else if u.Scheme == "http" || u.Scheme == "https" { p, _ := url.PathUnescape(u.EscapedPath()) tmpLocal := path.Join(os.TempDir(), path.Base(p)) err = Download(link, tmpLocal) if err != nil { logger.Infoln("音频文件下载失败: ", err) return } local = tmpLocal } else { logger.Infof("不支持的视频链接协议: %v\n", u.String()) return } } return } // Download 下载文件 func Download(link string, local string) (err error) { resp, err := http.Get(link) if err != nil { return } defer resp.Body.Close() f, err := os.OpenFile(local, os.O_CREATE|os.O_WRONLY, 0666) if err != nil { return } defer f.Close() _, err = io.Copy(f, resp.Body) return }