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 }