gin框架学习记录——文件上传

单文件上传

func (con UserController) Upload(r *gin.Context) {
	//获取用户给名
	username := r.PostForm("username")
	//接收文件
	avatar, err := r.FormFile("avatar")
	//保存路径
	filepath := path.Join("./static/upload", avatar.Filename)
	if err == nil {
		//获取文件名称
		//filename := avatar.Filename
		err01 := r.SaveUploadedFile(avatar, filepath)
		if err01 != nil {
			fmt.Println("err=", err01)
			return
		}
	}
	r.JSON(http.StatusOK, gin.H{
		"success":  true,
		"username": username,
		"filepath": filepath,
	})
}

多文件上传

(一)不同名字的文件上传和单文件上传同理

(二)同文件名的文件上传 前端输入框名字必须都为upload[]

func main() {
router := gin.Default()
// 为 multipart forms 设置较低的内存限制 (默认是 32 MiB)
// router.MaxMultipartMemory = 8 << 20  // 8 MiB
router.POST("/upload", func(c *gin.Context) {
    // Multipart form
    form, _ := c.MultipartForm()
    files := form.File["upload[]"]

    for _, file := range files {
        log.Println(file.Filename)

        // 上传文件至指定目录
        // c.SaveUploadedFile(file, dst)
    }
    c.String(http.StatusOK, fmt.Sprintf("%d files uploaded!", len(files)))
})
router.Run(":8080")
}

举个例子——按照日期存储图片

/*
*
上传图片
*/
func (con UserController) Upload(r *gin.Context) {
	//获取用户给名
	username := r.PostForm("username")
	//接收文件
	avatar, err := r.FormFile("avatar")

	if err == nil {
		//文件后缀名
		extName := path.Ext(avatar.Filename)
		//设置允许上传的图片格式
		allowExtMap := map[string]bool{
			".jpg":  true,
			".png":  true,
			".jpeg": true,
			".gif":  true,
		}
		//判断格式是否正确
		if _, ok := allowExtMap[extName]; !ok {
			r.String(200, "图片格式不正确!")
			return
		}
		//保存路径
		//获取今天时间
		day := models.GetDay()
		dir := "./static/upload/" + day
		mkdirerr := os.MkdirAll(dir, 0666)
		if mkdirerr != nil {
			fmt.Println(mkdirerr)
			r.String(200, "目录创建失败!")
			return
		}

		//生成文件名
		fileName := strconv.FormatInt(models.GetUnix(), 10) + extName

		//保存文件
		dst := path.Join(dir, fileName)
		err01 := r.SaveUploadedFile(avatar, dst)
		if err01 != nil {
			fmt.Println("err=", err01)
			r.String(200, "保存文件出错")
			return
		}
	}

	//返回信息
	r.JSON(http.StatusOK, gin.H{
		"success":  true,
		"username": username,
	})
}

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值