Files
game-driver/pkg/utils/link_video.go

56 lines
1.1 KiB
Go

package utils
import (
"io"
"log"
"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 {
log.Println("音频 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 {
log.Println("音频文件下载失败: ", err)
return
}
local = tmpLocal
} else {
log.Printf("不支持的视频链接协议: %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
}