56 lines
1.1 KiB
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
|
|
}
|