Golang框架文件上传—— go基础操作

1. 单文件上传

	file, err := c.FormFile("face")//从表单中获取键对应的值
	dst := path.Join("Gin/static/upload", file.Filename)
	if err == nil {
		c.SaveUploadedFile(file, dst)//根据dst路径保存文件
	}
	c.JSON(http.StatusOK, gin.H{
		"success":  true,
		"username": username,
		"dst":      dst,
	})//返回前端数据

2. 多文件上传

	form, _ := c.MultipartForm() //form变量被赋值为一个多文件的表单
	files := form.File["face[]"]//从form中取所有相同键的值(底层map)
	for _, file := range files {//遍历files
		dst := path.Join("Gin/static/upload", file.Filename)
		c.SaveUploadedFile(file, dst)//每次遍历都在dst路径中存储文件
	}
	c.JSON(http.StatusOK, gin.H{
		"success":  true,
		"username": username,
	})//返回前端数据

3. 根据日期上传图片(同文件夹下同名图片不覆盖)

	//1. 获取上传的文件
	file, err := c.FormFile("face")
	if err == nil {
		//2. 获取文件后缀名
		extName := path.Ext(file.Filename)
		allowExtMap := map[string]bool{
			".jpg":  true,
			".png":  true,
			".gif":  true,
			".jpeg": true,
			".webp": true,
		}//通过map指定能接受的文件的后缀名
		if !allowExtMap[extName] {
			c.String(200, "上传的文件类型不合法")
			return
		}
		//3. 创建图片保存的目录
		day := models.GetDay()
		dir := "Gin/static/upload/" + day
		err := os.MkdirAll(dir, 0666)
		if err != nil {
			fmt.Println(err)
			c.String(http.StatusOK, "MkdirAll失败")
			return
		}
		//4. 生成文件名称和文件保存的目录
		fileName := strconv.FormatInt(models.GetUnix(), 10) + extName
		//5. 执行上传
		dst := path.Join(dir, fileName)
		c.SaveUploadedFile(file, dst)
	}
	c.JSON(http.StatusOK, gin.H{
		"success":  true,
		"username": username,
	})

到此文件上传操作结束.

注意:以上日期上传图片用到的models包下的方法:

package models

import "time"

/**
*
* @author yth
* @language go
* @since 2022/11/12 8:47
 */

// UnixToTime 时间戳转换成日期
func UnixToTime(timestamp int) string {
	t := time.Unix(int64(timestamp), 0)
	return t.Format("2006-01-02 15:04:05")
}

// DateToUnix 日期转换成时间戳
func DateToUnix(str string) int64 {
	template := "2006-01-02 15:04:05"
	t, err := time.ParseInLocation(template, str, time.Local)
	if err != nil {
		return 0
	}
	return t.Unix()
}

// GetUnix 获取时间戳
func GetUnix() int64 {
	return time.Now().Unix()
}

// GetDate 获取当前的日期
func GetDate() string {
	template := "2006-01-02 15:04:05"
	return time.Now().Format(template)
}

// GetDay 获取年月日
func GetDay() string {
	template := "20060102"
	return time.Now().Format(template)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值