mirror of
https://github.com/unti-io/go-utils.git
synced 2025-10-11 11:10:27 +08:00
96 lines
1.9 KiB
Go
96 lines
1.9 KiB
Go
package utils
|
|
|
|
import (
|
|
"github.com/spf13/cast"
|
|
"os"
|
|
"path/filepath"
|
|
)
|
|
|
|
// FileList 获取指定目录下的所有文件
|
|
func FileList(path any, opt ...map[string]any) (slice []string) {
|
|
|
|
// 默认参数
|
|
defOpt := map[string]any{
|
|
// 获取指定后缀的文件
|
|
"ext": []string{"*"},
|
|
// 包含子目录
|
|
"sub": true,
|
|
// 返回路径格式
|
|
"format": "network",
|
|
// 域名
|
|
"domain": "",
|
|
// 过滤前缀
|
|
"prefix": "",
|
|
}
|
|
|
|
if len(opt) != 0 {
|
|
// 合并参数
|
|
for key, val := range defOpt {
|
|
if opt[0][key] == nil {
|
|
opt[0][key] = val
|
|
}
|
|
}
|
|
} else {
|
|
// 默认参数
|
|
opt = append(opt, defOpt)
|
|
}
|
|
|
|
conf := opt[0]
|
|
err := filepath.Walk(cast.ToString(path), func(path string, info os.FileInfo, err error) error {
|
|
// 忽略当前目录
|
|
if info.IsDir() {
|
|
return nil
|
|
}
|
|
// 忽略子目录
|
|
if !conf["sub"].(bool) && filepath.Dir(path) != path {
|
|
return nil
|
|
}
|
|
// []string 转 []any
|
|
var exts []any
|
|
for _, v := range conf["ext"].([]string) {
|
|
exts = append(exts, v)
|
|
}
|
|
// 忽略指定后缀
|
|
if !InArray("*", exts) && !InArray(filepath.Ext(path), exts) {
|
|
return nil
|
|
}
|
|
slice = append(slice, path)
|
|
return nil
|
|
})
|
|
|
|
if err != nil {
|
|
return []string{}
|
|
}
|
|
|
|
// 转码为网络路径
|
|
if conf["format"] == "network" {
|
|
for key, val := range slice {
|
|
slice[key] = filepath.ToSlash(val)
|
|
if !IsEmpty(conf["domain"]) {
|
|
// root, _ := os.Getwd()
|
|
// slice[key] = cast.ToString(conf["domain"]) + slice[key][len(root) + len(cast.ToString(conf["prefix"])):]
|
|
slice[key] = cast.ToString(conf["domain"]) + slice[key][len(cast.ToString(conf["prefix"])):]
|
|
}
|
|
}
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
// FileBytes 获取文件字节
|
|
func FileBytes(path any) []byte {
|
|
// 读取文件
|
|
file, err := os.Open(cast.ToString(path))
|
|
if err != nil {
|
|
return []byte{}
|
|
}
|
|
defer file.Close()
|
|
// 获取文件大小
|
|
info, _ := file.Stat()
|
|
size := info.Size()
|
|
// 读取文件
|
|
data := make([]byte, size)
|
|
file.Read(data)
|
|
return data
|
|
}
|