2023-01-20 10:53:34 +08:00

82 lines
1.8 KiB
Go

package upload_chunk
import (
"errors"
"fmt"
"os"
"path"
"strings"
)
// 解析文件目录,文件前缀及文件后缀
func parseFilePath(filename string) (dir, prefix, suffix string) {
filenameall := path.Base(filename) //不含目录的文件名
filesuffix := path.Ext(filename) // 后缀
fileprefix := strings.TrimSuffix(filenameall, filesuffix) // 前缀
dir = strings.TrimRight(filename, filenameall) // 文件目录
prefix = fileprefix // 文件前缀
suffix = filesuffix // 文件后缀
return
}
// 创建文件
func createFile(fullFilePath string) (ok bool, err error) {
ok = fileExists(fullFilePath)
if ok {
return
}
dir, _, _ := parseFilePath(fullFilePath)
if dir != "" {
err = mkDir(dir)
if err != nil {
return
}
}
newFile, err := os.Create(fullFilePath)
defer newFile.Close()
if err != nil {
return
}
return
}
// 创建文件夹
func mkDir(path string) (err error) {
if !fileExists(path) {
if err = os.MkdirAll(path, os.ModePerm); err != nil {
return errors.New(fmt.Sprintf(`os.MkdirAll failed for path "%s" with perm "%d" , err : %v`, path, os.ModePerm, err))
}
return nil
}
return
}
// 判断所给路径是否为文件夹
func IsDir(path string) bool {
s, err := os.Stat(path)
if err != nil {
return false
}
return s.IsDir()
}
// 是否文件
func IsFile(path string) bool {
return !IsDir(path)
}
// 判断文件或文件夹是否存在
func fileExists(path string) bool {
if stat, err := os.Stat(path); stat != nil && !os.IsNotExist(err) {
return true
}
return false
}
// 生成分片文件名
func getChunkFilename(identifier, chunkNumber string) string {
return fmt.Sprintf("uploader-%s.%s", identifier, chunkNumber)
}