You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
1.5 KiB
85 lines
1.5 KiB
package utils
|
|
|
|
import (
|
|
"fmt"
|
|
"math/rand"
|
|
"os"
|
|
"path"
|
|
"strconv"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant"
|
|
)
|
|
|
|
const (
|
|
BYTE = 1 << (10 * iota)
|
|
KILOBYTE
|
|
MEGABYTE
|
|
GIGABYTE
|
|
TERABYTE
|
|
PETABYTE
|
|
EXABYTE
|
|
)
|
|
|
|
// Determine whether the given path is a folder
|
|
func IsDir(path string) bool {
|
|
s, err := os.Stat(path)
|
|
if err != nil {
|
|
return false
|
|
}
|
|
return s.IsDir()
|
|
}
|
|
|
|
// Determine whether the given path is a file
|
|
func IsFile(path string) bool {
|
|
return !IsDir(path)
|
|
}
|
|
|
|
// Create a directory
|
|
func MkDir(path string) error {
|
|
return os.MkdirAll(path, os.ModePerm)
|
|
}
|
|
|
|
func GetNewFileNameAndContentType(fileName string, fileType int) (string, string) {
|
|
suffix := path.Ext(fileName)
|
|
newName := fmt.Sprintf("%d-%d%s", time.Now().UnixNano(), rand.Int(), fileName)
|
|
contentType := ""
|
|
if fileType == constant.ImageType {
|
|
contentType = "image/" + suffix[1:]
|
|
}
|
|
return newName, contentType
|
|
}
|
|
|
|
func ByteSize(bytes uint64) string {
|
|
unit := ""
|
|
value := float64(bytes)
|
|
switch {
|
|
case bytes >= EXABYTE:
|
|
unit = "E"
|
|
value = value / EXABYTE
|
|
case bytes >= PETABYTE:
|
|
unit = "P"
|
|
value = value / PETABYTE
|
|
case bytes >= TERABYTE:
|
|
unit = "T"
|
|
value = value / TERABYTE
|
|
case bytes >= GIGABYTE:
|
|
unit = "G"
|
|
value = value / GIGABYTE
|
|
case bytes >= MEGABYTE:
|
|
unit = "M"
|
|
value = value / MEGABYTE
|
|
case bytes >= KILOBYTE:
|
|
unit = "K"
|
|
value = value / KILOBYTE
|
|
case bytes >= BYTE:
|
|
unit = "B"
|
|
case bytes == 0:
|
|
return "0"
|
|
}
|
|
result := strconv.FormatFloat(value, 'f', 1, 64)
|
|
result = strings.TrimSuffix(result, ".0")
|
|
return result + unit
|
|
}
|