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.

83 lines
1.6 KiB

package file
import (
"fmt"
"github.com/gin-gonic/gin"
"github.com/golangkit/filetag"
"github.com/micro/go-micro/errors"
"os"
"path/filepath"
"recook/internal/back"
"recook/internal/static_path"
"recook/tools"
"strings"
)
const (
MaxPhotoFileMemory = (1 << 23) + (1 << 21) // 10M
)
func UploadPhoto(c *gin.Context) {
f, err := c.FormFile("photo")
if err != nil {
back.Fail(c, err.Error())
return
}
if f.Size > MaxPhotoFileMemory {
back.Fail(c, "文件太大")
return
}
name, err := filetag.Multipart(f)
if err != nil {
back.Fail(c, err.Error())
return
}
elements := strings.Split(f.Filename, ".")
ext := elements[len(elements)-1:][0]
ext = strings.ToLower(ext)
path := filepath.Join(static_path.Dir.Photo, name+"."+ext)
if PathExists(path) == false {
uri := filepath.Join(static_path.Dir.Root, path)
err = c.SaveUploadedFile(f, uri)
if err != nil {
back.Err(c, err.Error())
return
}
}
back.Suc(c, "上传成功", &gin.H{
"url": path,
})
}
// ===================================================
// ============== 私有 生成文件名称 =============
// ===================================================
func generatePhotoFilename(fn string) (name string, err error) {
n := filepath.Base(fn)
elements := strings.Split(n, ".")
en := elements[len(elements)-1:][0]
en = strings.ToLower(en)
if en != "png" && en != "jpg" && en != "jpeg" && en != "gif" {
err := errors.New("", "图片类型不支持", 1)
return "", err
}
return fmt.Sprintf("%v.%v", tools.Token(), en), nil
}
func PathExists(path string) bool {
_, err := os.Stat(path)
if err == nil {
return true
}
return false
}