// error debug package file import ( "errors" "io" "io/ioutil" "net/http" "os" //"os/exec" "path" "path/filepath" //"runtime" "log" "strings" ) /** * 文件下载 * param url 要下载的文件URL * param filename 文件保存路径(或文件保存名称) */ func DownloadFile(url, filename string) error { if url == "" { return errors.New("文件下载地址为空") } //判断filename是路径还是文件名 fileIndex := strings.Index(filename, ".") var filePath string if fileIndex < 1 { //名称是路径 index := strings.Index(url, "?") if index > 0 { url1 := url[0:index] index2 := strings.LastIndex(url1, "/") //修改此处index2为index2+1,不然多了一个多余的/ fileName := url1[index2+1:] filePath = strings.TrimRight(filename, "/") + "/" + fileName } else { fileName := path.Base(url) //获取文件名带后缀 filePath = strings.TrimRight(filename, "/") + "/" + fileName } } else { filePath = filename } res, err := http.Get(url) if err != nil { return err } dir, _ := filepath.Split(filePath) CreatePath(dir) file, err := os.Create(filePath) if err != nil { return err } _, copyerr := io.Copy(file, res.Body) if copyerr != nil { return err } return nil } /** * 获取远程接口信息 */ func Geturl(url string) ([]byte, error) { resp, err := http.Get(url) if err != nil { return []byte(""), err } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { return []byte(""), err } return body, nil } /** * 文件是否存在 */ func FileExists(path string) (bool, error) { _, err := os.Stat(path) if err == nil { return true, nil } if os.IsNotExist(err) { return false, nil } return false, err } // Copy a file func Cpfile(originalFilePath, newFilePath string) error { // Open original file originalFile, err := os.Open(originalFilePath) if err != nil { return err } defer originalFile.Close() // Create new file newFile, err := os.Create(newFilePath) if err != nil { return err } defer newFile.Close() // Copy the bytes to destination from source _, err = io.Copy(newFile, originalFile) if err != nil { return err } // Commit the file contents // Flushes memory to disk err = newFile.Sync() if err != nil { return err } return nil } func WriteFile(filePath, data string) error { fileExist, err := FileExists(filePath) if err != nil { return err } var f *os.File if fileExist { //如果文件存在 f, err = os.OpenFile(filePath, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644) //打开文件 } else { f, err = os.Create(filePath) //创建文件 } if err != nil { return err } _, err = io.WriteString(f, data) //写入文件(字符串) if err != nil { return err } return nil } /** * read file */ func ReadFile(path string) string { fi, err := os.Open(path) if err != nil { return "" } defer fi.Close() fd, err := ioutil.ReadAll(fi) return string(fd) } /** *读取文件内容(返回字符串) */ func GetFileContent(FilePath string) string { buf, err := ioutil.ReadFile(FilePath) if err != nil { log.Println("ERROR", "read file error", FilePath, err) return "" } return string(buf) }