github.com/goravel/framework@v1.13.9/support/file/file.go (about)

     1  package file
     2  
     3  import (
     4  	"errors"
     5  	"os"
     6  	"path/filepath"
     7  	"strings"
     8  	"time"
     9  
    10  	"github.com/gabriel-vasile/mimetype"
    11  )
    12  
    13  func ClientOriginalExtension(file string) string {
    14  	return strings.ReplaceAll(filepath.Ext(file), ".", "")
    15  }
    16  
    17  func Contain(file string, search string) bool {
    18  	if Exists(file) {
    19  		data, err := os.ReadFile(file)
    20  		if err != nil {
    21  			return false
    22  		}
    23  		return strings.Contains(string(data), search)
    24  	}
    25  
    26  	return false
    27  }
    28  
    29  func Create(file string, content string) error {
    30  	if err := os.MkdirAll(filepath.Dir(file), os.ModePerm); err != nil {
    31  		return err
    32  	}
    33  
    34  	f, err := os.Create(file)
    35  	if err != nil {
    36  		return err
    37  	}
    38  	defer f.Close()
    39  
    40  	if _, err = f.WriteString(content); err != nil {
    41  		return err
    42  	}
    43  
    44  	return nil
    45  }
    46  
    47  func Exists(file string) bool {
    48  	_, err := os.Stat(file)
    49  	return err == nil
    50  }
    51  
    52  // Extension Supported types: https://github.com/gabriel-vasile/mimetype/blob/master/supported_mimes.md
    53  func Extension(file string, originalWhenUnknown ...bool) (string, error) {
    54  	mtype, err := mimetype.DetectFile(file)
    55  	if err != nil {
    56  		return "", err
    57  	}
    58  
    59  	if mtype.String() == "" {
    60  		if len(originalWhenUnknown) > 0 {
    61  			if originalWhenUnknown[0] {
    62  				return ClientOriginalExtension(file), nil
    63  			}
    64  		}
    65  
    66  		return "", errors.New("unknown file extension")
    67  	}
    68  
    69  	return strings.TrimPrefix(mtype.Extension(), "."), nil
    70  }
    71  
    72  func LastModified(file, timezone string) (time.Time, error) {
    73  	fileInfo, err := os.Stat(file)
    74  	if err != nil {
    75  		return time.Time{}, err
    76  	}
    77  
    78  	l, err := time.LoadLocation(timezone)
    79  	if err != nil {
    80  		return time.Time{}, err
    81  	}
    82  
    83  	return fileInfo.ModTime().In(l), nil
    84  }
    85  
    86  func MimeType(file string) (string, error) {
    87  	mtype, err := mimetype.DetectFile(file)
    88  	if err != nil {
    89  		return "", err
    90  	}
    91  
    92  	return mtype.String(), nil
    93  }
    94  
    95  func Remove(file string) error {
    96  	_, err := os.Stat(file)
    97  	if err != nil {
    98  		if os.IsNotExist(err) {
    99  			return nil
   100  		}
   101  
   102  		return err
   103  	}
   104  
   105  	return os.RemoveAll(file)
   106  }
   107  
   108  func Size(file string) (int64, error) {
   109  	fileInfo, err := os.Open(file)
   110  	if err != nil {
   111  		return 0, err
   112  	}
   113  	defer fileInfo.Close()
   114  
   115  	fi, err := fileInfo.Stat()
   116  	if err != nil {
   117  		return 0, err
   118  	}
   119  
   120  	return fi.Size(), nil
   121  }