package utils import ( "encoding/xml" "fmt" "github.com/charmbracelet/log" jsoniter "github.com/json-iterator/go" "io" "net/http" "os" "os/exec" "path/filepath" "runtime" "strings" "time" ) var myClient = &http.Client{Timeout: 10 * time.Second} func GetJson(url string, target interface{}) error { log.Info("GetJson", "url", fmt.Sprintf("%s", url)) r, err := myClient.Get(url) if err != nil { return err } defer r.Body.Close() var json = jsoniter.ConfigCompatibleWithStandardLibrary return json.NewDecoder(r.Body).Decode(target) } func GetXml(url string, target interface{}) error { log.Info("GetXml", "url", fmt.Sprintf("%s", url)) r, err := myClient.Get(url) if err != nil { return err } defer r.Body.Close() return xml.NewDecoder(r.Body).Decode(target) } func DownloadFile(path string, url string) (err error) { dir := filepath.Dir(path) err = os.MkdirAll(dir, 0644) if err != nil { return err } out, err := os.Create(path) if err != nil { return err } defer out.Close() // Get the data resp, err := http.Get(url) if err != nil { return err } defer resp.Body.Close() // Writer the body to file _, err = io.Copy(out, resp.Body) if err != nil { return err } return nil } func IsCommandAvailable(name string) bool { command := "ossutil -v" var cmd *exec.Cmd if runtime.GOOS == "windows" { cmd = exec.Command("powershell", command) // windows specific code here... } else { cmd = exec.Command("bash", command) } if err := cmd.Run(); err != nil { return false } return true } func DetectSource(path string, dest string, ossUrl string) (url string) { saveP := strings.Split(path, "?")[0] if strings.Contains(saveP, ossUrl+"720yun_fd_manage/") { p := strings.ReplaceAll(saveP, ossUrl+"720yun_fd_manage/", "") url = dest + "/" + p } if strings.Contains(saveP, ossUrl+"scene_edit_data/") { p := strings.ReplaceAll(saveP, ossUrl, "") url = dest + "/" + p } if strings.Contains(saveP, ossUrl) { p := strings.ReplaceAll(saveP, ossUrl, "/") url = dest + "/" + p } return url } func EnsureDir(dirName string) error { err := os.MkdirAll(dirName, os.ModeDir) if err == nil || os.IsExist(err) { return nil } else { return err } }