1Panel/backend/utils/files/utils.go

70 lines
1.2 KiB
Go
Raw Normal View History

2022-08-24 11:10:50 +08:00
package files
import (
2022-08-30 17:59:59 +08:00
"github.com/gabriel-vasile/mimetype"
"github.com/spf13/afero"
2022-08-24 11:10:50 +08:00
"os"
"os/user"
"path/filepath"
2022-08-24 11:10:50 +08:00
"strconv"
"sync"
2022-08-24 11:10:50 +08:00
)
func IsSymlink(mode os.FileMode) bool {
return mode&os.ModeSymlink != 0
}
func GetUsername(uid uint32) string {
usr, err := user.LookupId(strconv.Itoa(int(uid)))
if err != nil {
return ""
}
return usr.Username
}
func GetGroup(gid uint32) string {
usr, err := user.LookupGroupId(strconv.Itoa(int(gid)))
if err != nil {
return ""
}
return usr.Name
}
2022-08-30 17:59:59 +08:00
func GetMimeType(path string) string {
mime, err := mimetype.DetectFile(path)
if err != nil {
return ""
}
return mime.String()
}
func GetSymlink(path string) string {
linkPath, err := os.Readlink(path)
if err != nil {
return ""
}
return linkPath
}
2022-09-09 11:20:02 +08:00
func ScanDir(fs afero.Fs, path string, dirMap *sync.Map, wg *sync.WaitGroup) {
afs := &afero.Afero{Fs: fs}
files, _ := afs.ReadDir(path)
for _, f := range files {
if f.IsDir() {
wg.Add(1)
go ScanDir(fs, filepath.Join(path, f.Name()), dirMap, wg)
} else {
if f.Size() > 0 {
dirMap.Store(filepath.Join(path, f.Name()), float64(f.Size()))
}
}
}
defer wg.Done()
}
2022-09-09 11:20:02 +08:00
const dotCharacter = 46
func IsHidden(path string) bool {
return path[0] == dotCharacter
}