update
This commit is contained in:
@@ -9,6 +9,7 @@ import (
|
||||
"path"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/h2non/filetype"
|
||||
gonanoid "github.com/matoous/go-nanoid/v2"
|
||||
)
|
||||
@@ -20,82 +21,94 @@ const (
|
||||
|
||||
var ErrUnsupported = errors.New("文件格式不支持")
|
||||
|
||||
type FileType int
|
||||
type Type int
|
||||
|
||||
const (
|
||||
ALL FileType = 0
|
||||
IMG FileType = 1
|
||||
ALL Type = 0
|
||||
IMG Type = 1
|
||||
)
|
||||
|
||||
func UploadFilename(filepath string, t FileType) (string, error) {
|
||||
fileOpen, err := os.Open(filepath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer fileOpen.Close()
|
||||
|
||||
fileBytes, err := io.ReadAll(fileOpen)
|
||||
if err != nil {
|
||||
return "", errors.New("failed to read file")
|
||||
}
|
||||
//func UploadFilename(filepath string, t Type) (string, error) {
|
||||
// fileOpen, err := os.Open(filepath)
|
||||
// if err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
// defer func(fileOpen *os.File) {
|
||||
// _ = fileOpen.Close()
|
||||
// }(fileOpen)
|
||||
//
|
||||
// fileBytes, err := io.ReadAll(fileOpen)
|
||||
// if err != nil {
|
||||
// return "", errors.New("failed to read file")
|
||||
// }
|
||||
//
|
||||
// if t == IMG {
|
||||
// // 判断是不是图片
|
||||
// if !filetype.IsImage(fileBytes) {
|
||||
// return "", ErrUnsupported
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// kind, err := filetype.Match(fileBytes)
|
||||
// if err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
//
|
||||
// if kind == filetype.Unknown {
|
||||
// return "", ErrUnsupported
|
||||
// }
|
||||
//
|
||||
// // 使用 filetype 判断类型后已经去读了一些bytes了
|
||||
// // 要恢复文件读取位置
|
||||
// _, err = fileOpen.Seek(0, io.SeekStart)
|
||||
// if err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
//
|
||||
// dir := GetPath()
|
||||
// exist, _ := Exists(dir)
|
||||
// if !exist {
|
||||
// if err := Mkdir(dir); err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// filename := GenFilename(kind.Extension)
|
||||
// fullPath := path.Join(dir, filename)
|
||||
// f, err := os.Create(fullPath)
|
||||
// if err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
// defer func(f *os.File) {
|
||||
// _ = f.Close()
|
||||
// }(f)
|
||||
//
|
||||
// _, err = io.Copy(f, fileOpen)
|
||||
// if err != nil {
|
||||
// return "", err
|
||||
// }
|
||||
//
|
||||
// return "/" + fullPath, nil
|
||||
//}
|
||||
|
||||
func UploadFile(file *multipart.FileHeader, t Type) (string, error) {
|
||||
if t == IMG {
|
||||
// 判断是不是图片
|
||||
if !filetype.IsImage(fileBytes) {
|
||||
return "", ErrUnsupported
|
||||
if file.Size > MaxImageSize {
|
||||
return "", errors.New("failed to receive images too large")
|
||||
}
|
||||
}
|
||||
|
||||
kind, err := filetype.Match(fileBytes)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
if kind == filetype.Unknown {
|
||||
return "", ErrUnsupported
|
||||
}
|
||||
|
||||
// 使用 filetype 判断类型后已经去读了一些bytes了
|
||||
// 要恢复文件读取位置
|
||||
_, err = fileOpen.Seek(0, io.SeekStart)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
dir := GetPath()
|
||||
exist, _ := Exists(dir)
|
||||
if !exist {
|
||||
if err := Mkdir(dir); err != nil {
|
||||
return "", err
|
||||
} else {
|
||||
if file.Size > MaxFileSize {
|
||||
return "", errors.New("failed to receive file too large")
|
||||
}
|
||||
}
|
||||
|
||||
filename := GenFilename(kind.Extension)
|
||||
path := path.Join(dir, filename)
|
||||
f, err := os.Create(path)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
_, err = io.Copy(f, fileOpen)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return "/" + path, nil
|
||||
}
|
||||
|
||||
func UploadFile(file *multipart.FileHeader, t FileType) (string, error) {
|
||||
if file.Size > MaxFileSize {
|
||||
return "", errors.New("failed to receive file too large")
|
||||
}
|
||||
|
||||
fileOpen, err := file.Open()
|
||||
if err != nil {
|
||||
return "", errors.New("fialed to open file")
|
||||
return "", errors.New("failed to open file")
|
||||
}
|
||||
defer fileOpen.Close()
|
||||
defer func(fileOpen multipart.File) {
|
||||
_ = fileOpen.Close()
|
||||
}(fileOpen)
|
||||
|
||||
fileBytes, err := io.ReadAll(fileOpen)
|
||||
if err != nil {
|
||||
@@ -134,19 +147,21 @@ func UploadFile(file *multipart.FileHeader, t FileType) (string, error) {
|
||||
}
|
||||
|
||||
filename := GenFilename(kind.Extension)
|
||||
path := path.Join(dir, filename)
|
||||
f, err := os.Create(path)
|
||||
fullPath := path.Join(dir, filename)
|
||||
f, err := os.Create(fullPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
defer f.Close()
|
||||
defer func(f *os.File) {
|
||||
_ = f.Close()
|
||||
}(f)
|
||||
|
||||
_, err = io.Copy(f, fileOpen)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return "/" + path, nil
|
||||
return "/" + fullPath, nil
|
||||
}
|
||||
|
||||
func GetPath() string {
|
||||
@@ -154,6 +169,9 @@ func GetPath() string {
|
||||
}
|
||||
|
||||
func GenFilename(ext string) string {
|
||||
id, _ := gonanoid.New()
|
||||
id, err := gonanoid.New()
|
||||
if err != nil {
|
||||
return uuid.New().String()
|
||||
}
|
||||
return fmt.Sprintf("%s.%s", id, ext)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user