github.com/binbinly/pkg@v0.0.11-0.20240321014439-f4fbf666eb0f/util/xfile/file.go (about)

     1  package xfile
     2  
     3  import (
     4  	"bytes"
     5  	"image"
     6  	_ "image/gif"
     7  	_ "image/jpeg"
     8  	_ "image/png"
     9  	"io"
    10  	"os"
    11  	"path/filepath"
    12  	"strings"
    13  )
    14  
    15  // Exist 文件或目录是否存在
    16  func Exist(s string) bool {
    17  	_, err := os.Stat(s)
    18  	return err == nil || os.IsExist(err)
    19  }
    20  
    21  // Is 文件是否存在
    22  func Is(s string) bool {
    23  	info, err := os.Stat(s)
    24  	if err != nil {
    25  		return false
    26  	}
    27  	return !info.IsDir()
    28  }
    29  
    30  // IsDir 目录是否存在
    31  func IsDir(s string) bool {
    32  	info, err := os.Stat(s)
    33  	if err != nil {
    34  		return false
    35  	}
    36  	return info.IsDir()
    37  }
    38  
    39  // ImageType 图片类型
    40  func ImageType(read io.Reader) (string, error) {
    41  	src, err := io.ReadAll(read)
    42  	if err != nil {
    43  		return "", err
    44  	}
    45  	reader := bytes.NewReader(src)
    46  	// 必须引入 image/jpeg,gif,png 包 否则会报 image: unknown format
    47  	_, imgType, err := image.Decode(reader)
    48  	if err != nil {
    49  		return "", err
    50  	}
    51  	return imgType, nil
    52  }
    53  
    54  // Ext 获取文件后缀名
    55  func Ext(filename string) string {
    56  	index := strings.LastIndex(filename, ".")
    57  	if index == -1 || index == len(filename)-1 {
    58  		return ""
    59  	}
    60  	return filename[index+1:]
    61  }
    62  
    63  // Mkdir 创建目录
    64  func Mkdir(path string) error {
    65  	dir := filepath.Dir(path)
    66  	_, err := os.Stat(dir)
    67  	if os.IsNotExist(err) {
    68  		err = os.MkdirAll(dir, os.ModePerm)
    69  	}
    70  	return err
    71  }
    72  
    73  // Create 创建文件
    74  func Create(content bytes.Buffer, name string) error {
    75  	file, err := os.Create(name)
    76  	if err != nil {
    77  		return err
    78  	}
    79  	defer file.Close()
    80  
    81  	if _, err = file.Write(content.Bytes()); err != nil {
    82  		return err
    83  	}
    84  	return nil
    85  }