You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
137 lines
2.6 KiB
Go
137 lines
2.6 KiB
Go
package nfs
|
|
|
|
import (
|
|
"bytes"
|
|
"os"
|
|
"path"
|
|
"path/filepath"
|
|
)
|
|
|
|
// perm for create dir or file
|
|
var (
|
|
DefaultDirPerm os.FileMode = 0775
|
|
DefaultFilePerm os.FileMode = 0665
|
|
OnlyReadFilePerm os.FileMode = 0444
|
|
)
|
|
|
|
var (
|
|
// DefaultFileFlags for create and write
|
|
DefaultFileFlags = os.O_CREATE | os.O_WRONLY | os.O_APPEND
|
|
// OnlyReadFileFlags open file for read
|
|
OnlyReadFileFlags = os.O_RDONLY
|
|
)
|
|
|
|
// PathExists reports whether the named file or directory exists.
|
|
func PathExists(path string) bool {
|
|
if path == "" {
|
|
return false
|
|
}
|
|
|
|
if _, err := os.Stat(path); err != nil {
|
|
if os.IsNotExist(err) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// DirExists reports whether the named directory exists.
|
|
func DirExists(path string) bool {
|
|
return IsDir(path)
|
|
}
|
|
|
|
// IsDir reports whether the named directory exists.
|
|
func IsDir(path string) bool {
|
|
if path == "" || len(path) > 468 {
|
|
return false
|
|
}
|
|
|
|
if fi, err := os.Stat(path); err == nil {
|
|
return fi.IsDir()
|
|
}
|
|
return false
|
|
}
|
|
|
|
// FileExists reports whether the named file or directory exists.
|
|
func FileExists(path string) bool {
|
|
return IsFile(path)
|
|
}
|
|
|
|
// IsFile reports whether the named file or directory exists.
|
|
func IsFile(path string) bool {
|
|
if path == "" || len(path) > 468 {
|
|
return false
|
|
}
|
|
|
|
if fi, err := os.Stat(path); err == nil {
|
|
return !fi.IsDir()
|
|
}
|
|
return false
|
|
}
|
|
|
|
// IsAbsPath is abs path.
|
|
func IsAbsPath(aPath string) bool {
|
|
if len(aPath) > 0 {
|
|
if aPath[0] == '/' {
|
|
return true
|
|
}
|
|
return filepath.IsAbs(aPath)
|
|
}
|
|
return false
|
|
}
|
|
|
|
// ImageMimeTypes refer net/http package
|
|
var ImageMimeTypes = map[string]string{
|
|
"bmp": "image/bmp",
|
|
"gif": "image/gif",
|
|
"ief": "image/ief",
|
|
"jpg": "image/jpeg",
|
|
// "jpe": "image/jpeg",
|
|
"jpeg": "image/jpeg",
|
|
"png": "image/png",
|
|
"svg": "image/svg+xml",
|
|
"ico": "image/x-icon",
|
|
"webp": "image/webp",
|
|
}
|
|
|
|
// IsImageFile check file is image file.
|
|
func IsImageFile(path string) bool {
|
|
mime := MimeType(path)
|
|
if mime == "" {
|
|
return false
|
|
}
|
|
|
|
for _, imgMime := range ImageMimeTypes {
|
|
if imgMime == mime {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
// IsZipFile check is zip file.
|
|
// from https://blog.csdn.net/wangshubo1989/article/details/71743374
|
|
func IsZipFile(filepath string) bool {
|
|
f, err := os.Open(filepath)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
defer f.Close()
|
|
|
|
buf := make([]byte, 4)
|
|
if n, err := f.Read(buf); err != nil || n < 4 {
|
|
return false
|
|
}
|
|
|
|
return bytes.Equal(buf, []byte("PK\x03\x04"))
|
|
}
|
|
|
|
// PathMatch check for a string. alias of path.Match()
|
|
func PathMatch(pattern, s string) bool {
|
|
ok, err := path.Match(pattern, s)
|
|
if err != nil {
|
|
ok = false
|
|
}
|
|
return ok
|
|
}
|