Gin框架系列教程(8)- Gin图片&文件上传(单文件)
今天我们用Gin框架做一个单图片上传功能,多图上传同理就行。之后有时间可以测试一下。
直接上代码:
后端文件上传工具
package utils
import (
"errors"
"os"
"path"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
func UploadFile(c *gin.Context) (string, error) {
// 读取file文件
file, err := c.FormFile("file")
if err != nil {
return "", nil
}
//文件大小校验,限制300KB大小
size := file.Size
if size/1024 > 300 {
return "", errors.New("超过允许上传文件大小,最大300KB")
}
// 文件后缀校验
extName := path.Ext(file.Filename)
allowExtMap := map[string]bool{
".jpg": true,
".png": true,
".gif": true,
".jpeg": true,
}
if _, ok := allowExtMap[extName]; !ok {
return "", errors.New("不允许上传此类文件")
}
// 创建图片文件目录
day := DateStr()
dir := "./public/upload/" + day
err = os.MkdirAll(dir, 0666)
if err != nil {
return "", err
}
//执行上传,毫秒级时间名称
now := time.Now()
unixNano := now.UnixNano() / int64(time.Millisecond)
createFileName := strconv.FormatInt(unixNano, 10) + extName
pathDir := path.Join(dir, createFileName)
c.SaveUploadedFile(file, pathDir)
outerPath := "/" + pathDir
return outerPath, nil
}
// 组装年月日字符串当做文件路径
func DateStr() string {
template := "20060102"
return time.Now().Format(template)
}
后端调用:
// @Summary 文件上传
// @Description 用于文件上传
// @Tags UploadFile
// @Accept json
// @Produce json
// @Success 200 {string} string "{"success":200,"msg":"上传成功"}"
// @Failure 500 {string} UploadFile 失败后返回值
// @Router /api/v1/upload [post]
func UploadFile(c *gin.Context) {
path, err := utils.UploadFile(c)
if err != nil {
response.Error(c, http.StatusInternalServerError, err, "上传失败")
} else {
response.Success(c, path, "上传成功")
}
}
好了,测试图片上传成功。
还没有评论,快来发表第一个评论吧