// Copyright © 2023 OpenIM. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. package utils import ( "fmt" "github.com/OpenIMSDK/Open-IM-Server/pkg/common/constant" "math/rand" "os" "path" "strconv" "strings" "time" ) 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 }