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, "上传成功")
	}
}

好了,测试图片上传成功。

点赞1
点击评论0
收藏0
浏览 178
 

还没有评论,快来发表第一个评论吧

免责声明:凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,注册用户和一般页面游览者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任(包括侵权责任、合同责任和其它责任)
*尊重作者,转载请注明出处!

创作内容

开启你的爱凌峰创作之旅

发布首篇内容,开通创作中心
快来成为爱凌峰创作者吧~

写文章

板块热门【Gin】