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.

78 lines
1.7 KiB

package controller
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"niupicUpload/service"
"niupicUpload/util"
"os"
"path"
"strings"
"time"
)
/*
*
@author: sre
@date: 2022/8/19 0019
@desc: ImageController
*
*/
type ImageController struct{}
func NewImageController() ImageController {
return ImageController{}
}
// UploadNiupic 上传Niupic
func (a *ImageController) UploadNiupic(c *gin.Context) {
resultRes := util.NewResult(c)
f, err := c.FormFile("file")
if err != nil {
c.JSON(200, gin.H{
"code": 400,
"msg": "上传失败!",
})
return
} else {
//文件类型
fileExt := strings.ToLower(path.Ext(f.Filename))
fileName := util.Md5Encode(fmt.Sprintf("%s%s", f.Filename, time.Now().String()))
fildDir := fmt.Sprintf("%s%d%s_", "upload_tmp_", time.Now().Year(), time.Now().Month().String())
subfilepath := fmt.Sprintf("%s%s%s", fildDir, fileName, fileExt)
err := c.SaveUploadedFile(f, subfilepath)
if err != nil {
log.Println(err)
resultRes.Error(1, "图片保存失败")
} else {
//校验文件名称和类型的正确性
if strings.Contains(strings.ToUpper(fileExt), "JPEG") || strings.Contains(strings.ToUpper(fileExt), "JPG") || strings.Contains(strings.ToUpper(fileExt), "PNG") || strings.Contains(strings.ToUpper(fileExt), "GIF") {
_, err := util.CheckImageFile(subfilepath)
if err != nil {
c.JSON(200, gin.H{
"code": 400,
"msg": "上传失败 文件格式异常!",
})
return
}
}
url, err := service.UploadNiupic(subfilepath)
if err != nil {
resultRes.Error(1, "图片上传失败")
}
os.Remove(subfilepath)
log.Println("url:", url)
c.JSON(200, gin.H{
"code": 200,
"msg": "ok",
"result": url,
})
}
}
}