package utils
import (
"fmt"
"io"
"net/http"
"os"
"os/exec"
"strings"
)
// FileExists 判断给定路径的文件是否存在
// 如果文件存在,返回 true,否则返回 false
// 参数:
//
// path string - 文件路径
//
// 返回值:
//
// bool - 文件是否存在
func FileExists(path string) bool {
if _, err := os.Stat(path); err == nil {
return true
}
return false
}
// ReadFile 函数用于读取文件
func ReadFile(path string) ([]byte, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
defer f.Close()
b, err := io.ReadAll(f)
if err != nil {
return nil, err
}
return b, nil
}
// FileSave 函数用于保存文件
func FileSave(path, data string) error {
//获取文件名
fileName := strings.Split(path, "/")[len(strings.Split(path, "/"))-1]
path = strings.ReplaceAll(path, fileName, "")
// 创建目录路径
if err := os.MkdirAll(path, 0755); err != nil {
fmt.Println("Error creating directory:", err)
return err
}
f, err := os.Create(path + fileName)
if err != nil {
return err
}
defer f.Close()
_, err = io.WriteString(f, data)
if err != nil {
return err
}
return nil
}
// DownloadFile 函数用于下载文件,解压到指定目录,并删除下载的压缩文件
func DownloadFile(url, path string) {
fileName := strings.Split(url, "/")[len(strings.Split(url, "/"))-1]
// 下载文件
response, err := http.Get(url)
if err != nil {
fmt.Println("Error downloading file:", err)
return
}
defer response.Body.Close()
// 创建目录路径
if err := os.MkdirAll(path, 0755); err != nil {
fmt.Println("Error creating directory:", err)
return
}
// 创建目标文件
out, err := os.Create(path + "/" + fileName)
if err != nil {
fmt.Println("Error creating file:", err)
return
}
defer out.Close()
// 将下载的内容保存到文件
_, err = io.Copy(out, response.Body)
if err != nil {
fmt.Println("Error saving file:", err)
return
}
// 解压文件到指定目录
// cmd := exec.Command("tar", "xvf", path+"/"+fileName, "-C", path)
cmd := exec.Command("unzip", path+"/"+fileName, "-d", path)
err = cmd.Run()
if err != nil {
fmt.Println("Error extracting file:", err)
return
}
// 删除源文件
err = os.Remove(path + "/" + fileName)
if err != nil {
fmt.Println("Error deleting file:", err)
return
}
fmt.Println("File downloaded, extracted, and source file deleted successfully.")
}