102 lines
1.6 KiB
Go
102 lines
1.6 KiB
Go
package upload
|
|
|
|
import (
|
|
"blog/global"
|
|
"blog/pkg/util"
|
|
"io"
|
|
"io/ioutil"
|
|
"mime/multipart"
|
|
"os"
|
|
"path"
|
|
"strings"
|
|
)
|
|
|
|
type FileType int
|
|
|
|
const (
|
|
TypeImage FileType = iota + 1
|
|
TypeExcel
|
|
TypeTxt
|
|
)
|
|
|
|
func GetFileName(name string) string {
|
|
ext := GetFileExt(name)
|
|
fileName := strings.TrimSuffix(name, ext)
|
|
fileName = util.EncodeMD5(fileName)
|
|
|
|
return fileName + ext
|
|
}
|
|
|
|
func GetFileExt(name string) string {
|
|
return path.Ext(name)
|
|
}
|
|
|
|
func GetSavePath() string {
|
|
return global.AppSetting.UploadSavePath
|
|
}
|
|
|
|
func CheckSavePath(dst string) bool {
|
|
_, err := os.Stat(dst)
|
|
return os.IsNotExist(err)
|
|
}
|
|
|
|
func CheckContainExt(t FileType, name string) bool {
|
|
ext := GetFileExt(name)
|
|
ext = strings.ToUpper(ext)
|
|
switch t {
|
|
case TypeImage:
|
|
for _, allowExt := range global.AppSetting.UploadImageAllowExts {
|
|
if strings.ToUpper(allowExt) == ext {
|
|
return true
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func CheckMaxSize(t FileType, f multipart.File) bool {
|
|
content, _ := ioutil.ReadAll(f)
|
|
size := len(content)
|
|
switch t {
|
|
case TypeImage:
|
|
if size >= global.AppSetting.UploadImageMaxSize*1024*1024 {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
func CheckPermission(dst string) bool {
|
|
_, err := os.Stat(dst)
|
|
return os.IsPermission(err)
|
|
}
|
|
|
|
func CreateSavePath(dst string, perm os.FileMode) error {
|
|
err := os.MkdirAll(dst, perm)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func SaveFile(file *multipart.FileHeader, dst string) error {
|
|
src, err := file.Open()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer src.Close()
|
|
|
|
out, err := os.Create(dst)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer out.Close()
|
|
|
|
_, err = io.Copy(out, src)
|
|
return err
|
|
}
|