|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- package svc
-
- import (
- "fmt"
- "strings"
-
- "applet/app/e"
- "applet/app/lib/qiniu"
- "applet/app/md"
- "applet/app/utils"
- "applet/app/utils/logx"
-
- "github.com/gin-gonic/gin"
- )
-
- // 请求文件上传
- func ImgReqUpload(c *gin.Context, uid, dirName, fname, callbackUrl string, fsize int64) (interface{}, error) {
- ext := utils.FileExt(fname)
- if err := initStg(c, fsize, ext); err != nil {
- return nil, err
- }
- // logx.Warn(uid)
- newName := dirName + "_" + fmt.Sprintf("%010s", uid)
-
- // if dirName == md.FILE_DIR_FEEDBACK || dirName == md.FILE_DIR_STYLE {
- // newName += "_" + utils.FormatNanoUnix() + utils.RandString(4, "0123456789")
- // }
- // 默认都加时间戳
- newName += "_" + utils.FormatNanoUnix() + utils.RandString(4, "0123456789")
- newName += ".png" // 因为可能存在多种图像格式,这里统一后缀为png
-
- f := &md.FileCallback{
- Uid: uid,
- DirId: md.FileUserDir[dirName],
- FileName: newName,
- }
- // logx.Warn(f.Uid)
- return qiniu.ReqImgUpload(f, callbackUrl), nil
- }
-
- func initStg(c *gin.Context, fsize int64, ext string) error {
- // 获取上传配置
- stgInfo := SysCfgFind(
- c,
- md.KEY_CFG_FILE_BUCKET,
- md.KEY_CFG_FILE_HOST,
- md.KEY_CFG_FILE_AK,
- md.KEY_CFG_FILE_SK,
- md.KEY_CFG_FILE_PVD,
- md.KEY_CFG_FILE_REGION,
- md.KEY_CFG_FILE_MAX_SIZE,
- md.KEY_CFG_FILE_EXT,
- md.KEY_CFG_FILE_SCHEME,
- md.KEY_CFG_FILE_AVATAR_THUMBNAIL,
- )
- //?imageView2/1/w/120/h/120/format/webp/interlace/1
- if stgInfo == nil {
- return e.NewErrCode(e.ERR_CFG)
- }
- // todo 目前仅支持七牛
- if v, ok := stgInfo[md.KEY_CFG_FILE_PVD]; !ok || v != "qiniu" {
- return e.NewErrCode(e.ERR_CFG)
- }
- if v, ok := stgInfo[md.KEY_CFG_FILE_REGION]; !ok || v == "" {
- return e.NewErrCode(e.ERR_CFG)
- }
- if v, ok := stgInfo[md.KEY_CFG_FILE_AK]; !ok || v == "" {
- return e.NewErrCode(e.ERR_CFG)
- }
- if v, ok := stgInfo[md.KEY_CFG_FILE_SK]; !ok || v == "" {
- return e.NewErrCode(e.ERR_CFG)
- }
- if v, ok := stgInfo[md.KEY_CFG_FILE_BUCKET]; !ok || v == "" {
- return e.NewErrCode(e.ERR_CFG)
- }
- if v, ok := stgInfo[md.KEY_CFG_FILE_SCHEME]; !ok || v == "" {
- stgInfo[md.KEY_CFG_FILE_SCHEME] = "http"
- SysCfgSet(c, md.KEY_CFG_FILE_SCHEME, stgInfo[md.KEY_CFG_FILE_SCHEME], "文件域名HTTP协议")
- }
- qiniu.Init(stgInfo[md.KEY_CFG_FILE_AK], stgInfo[md.KEY_CFG_FILE_SK], stgInfo[md.KEY_CFG_FILE_BUCKET], stgInfo[md.KEY_CFG_FILE_REGION], stgInfo[md.KEY_CFG_FILE_SCHEME])
- if v, ok := stgInfo[md.KEY_CFG_FILE_HOST]; !ok || v == "" {
- var err error
- stgInfo[md.KEY_CFG_FILE_HOST], err = qiniu.BucketGetDomain(stgInfo[md.KEY_CFG_FILE_BUCKET])
- if err != nil {
- logx.Error(err)
- return e.NewErrCode(e.ERR_CFG)
- }
- SysCfgSet(c, md.KEY_CFG_FILE_HOST, stgInfo[md.KEY_CFG_FILE_HOST], "文件域名地址")
- }
- // 头像缩略图参数
- if v, ok := stgInfo[md.KEY_CFG_FILE_AVATAR_THUMBNAIL]; !ok || v == "" {
- SysCfgSet(c, md.KEY_CFG_FILE_AVATAR_THUMBNAIL, "?imageView2/1/w/200/h/200/format/png", "文件用户头像缩略图参数")
- }
-
- // 检查文件大小限制
- if v, ok := stgInfo[md.KEY_CFG_FILE_MAX_SIZE]; ok && v != "" && utils.StrToInt64(v) < fsize {
- return e.NewErrCode(e.ERR_FILE_MAX_SIZE)
- }
- // 检查文件后缀
- if v, ok := stgInfo[md.KEY_CFG_FILE_EXT]; ok && v != "" && !strings.Contains(v, ext) {
- return e.NewErrCode(e.ERR_FILE_EXT)
- }
- return nil
- }
|