单文件

表单模板

{{define "admin/useradd.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>演示上传</h2>
    <form action="/admin/user/doUpload" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="username" placeholder="用户名">
        <br>
        <br>
        头像<input type="file" name="face"/>
        <br> <br>
        <input type="submit" value="提交">
    </form>

</body>
</html>
{{end}}

Ps.需要在上传文件的 form 表单上面需要加入 enctype="multipart/form-data"

定义业务逻辑

func (con UserController) DoUpload(c *gin.Context) {
    username := c.PostForm("username")
    file, err := c.FormFile("face")
    dst := path.Join("./static/upload", file.Filename)
    //file.Filename 获取文件名称
    if err == nil {

        c.SaveUploadedFile(file, dst)
    }
    //c.String(200, "执行上传")
    c.JSON(200, gin.H{
        "success":  true,
        "username": username,
        "dst":      dst,
    })
}

多文件

{{define "admin/useredit.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>演示上传</h2>
    <form action="/admin/user/doEdit" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="username" placeholder="用户名">
        <br>
        <br>
        头像1<input type="file" name="face1"/>
        <br> <br>
        头像1<input type="file" name="face2"/>
        <br> <br>
        <input type="submit" value="提交">
    </form>

</body>
</html>

{{end}}

业务逻辑

func (con UserController) DoEdit(c *gin.Context) {
    c.String(200, "执行修改")
    username := c.PostForm("username")
    face1, err1 := c.FormFile("face1")
    dst1 := path.Join("./static/upload", face1.Filename)
    //file.Filename 获取文件名称
    if err1 == nil {
        c.SaveUploadedFile(face1, dst1)
    }
    face2, err2 := c.FormFile("face2")
    dst2 := path.Join("./static/upload", face2.Filename)
    //file.Filename 获取文件名称
    if err2 == nil {
        c.SaveUploadedFile(face2, dst2)
    }
    //c.String(200, "执行上传")
    c.JSON(200, gin.H{
        "success":  true,
        "username": username,
        "dst1":     dst1,
        "dst2":     dst2,
    })
}
func (con UserController) Edit(c *gin.Context) {
    //c.String(200, "用户列表")
    c.HTML(200, "admin/useredit.html", gin.H{})
}

多文件上传

{{define "admin/useradd.html"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h2>演示上传</h2>
    <form action="/admin/user/doUpload" method="post" enctype="multipart/form-data">
        用户名:<input type="text" name="username" placeholder="用户名">
        <br>
        <br>
        头像<input type="file" name="upload[]"/>
        <br> <br>
        壁纸<input type="file" name="upload[]"/>
        <br> <br>
        背景<input type="file" name="upload[]"/>
        <br> <br>
        <input type="submit" value="提交">
    </form>

</body>
</html>

{{end}}

实现修改文件并上传

func (con UserController) DoUpload(c *gin.Context) {
    username := c.PostForm("username")

    //获取上传的文件
    file, err := c.FormFile("face")
    if err == nil {
        extName := path.Ext(file.Filename)
        allowExtMap := map[string]bool{
            ".jpg":  true,
            ".png":  true,
            ".gif":  true,
            ".jpeg": true,
        }
        if _, ok := allowExtMap[extName]; !ok {
            c.String(200, "上传的文件类型不合法")
        }
        //创建图片保存目录
        day := models.GetDay()
        dir := "./static/upload/" + day

        err := os.MkdirAll(dir, 0666)
        if err != nil {
            fmt.Println(err)
            c.String(200, "MkdirAll失败")
            return
        }
        //生成文件名
        fileName := strconv.FormatInt(models.GetUnix(), 10) + extName

        //执行上传
        dst := path.Join(dir, fileName)
        c.SaveUploadedFile(file, dst)

    }
    //c.String(200, "执行上传")
    c.JSON(200, gin.H{
        "success":  true,
        "username": username,
    })
}