go语言gin框架的应用,路由+get请求示例+post示例+上传示例单/多文件示例

/home/wj/gocode/src/gin/main.go

package main
import (
    "net/http"
    "strings"
    "github.com/gin-gonic/gin"
    "fmt"
)

func main() {
   // 创建路由
   r := gin.Default()
   
   // 网站主页,绑定路由规则,执行的函数
   // gin.Context,封装了request和response
   r.GET("/", func(c *gin.Context) {
      c.String(http.StatusOK, "hello World!")
   })

   // GET请求,usl是参数一部分
   // 127.0.0.1:8001/user/wangjing/adduser
   r.GET("/user/:name/*action", func(c *gin.Context) {
        name := c.Param("name")
        action := c.Param("action")
        //截取/
        action = strings.Trim(action, "/")
        c.String(http.StatusOK, name+" is "+action)
    })

	// GET请求参数使用?获取,设置默认参数值
	// 127.0.0.1:8001/user2?name=wangjing
	r.GET("/user2", func(c *gin.Context){
		name := c.DefaultQuery("name", "默认名字")
		c.String(http.StatusOK, fmt.Sprintf("hello %s", name))
	})
	// POST提交表单
	r.POST("/form", func(c *gin.Context){
		types := c.DefaultPostForm("type", "post")
		username := c.PostForm("username")
		password := c.PostForm("userpassword")
		c.String(http.StatusOK, fmt.Sprintf("username:%s, password:%s,type:%s",username,password,types))
	})

	// POST上传一个.txt文件:web页面 
	// 127.0.0.1:8001/index
	r.LoadHTMLGlob("views/index.html")
	r.GET("/index", func(c *gin.Context) {
        c.HTML(http.StatusOK, "index.html", nil)
    })
	// POST上传一个.txt文件:服务端处理逻辑
	r.POST("/upload", func(c *gin.Context) {
   		f, err := c.FormFile("f1")
		if err != nil {
			c.JSON(http.StatusBadRequest, gin.H{
				"error": err,
			})
			return
		} else {
			c.SaveUploadedFile(f, "./wenjian/"+f.Filename)
			c.JSON(http.StatusOK, gin.H{
				"message": "OK",
			})
		}
	})

	// POST上传一个.txt文件:web页面
	// 127.0.0.1:8001/index2
	r.LoadHTMLGlob("views/index2.html")
	r.GET("/index2", func(c *gin.Context) {
		c.HTML(http.StatusOK, "index2.html", nil)
	})  

	// POST多文件上传
	// 127.0.0.1/uploadMore
	// 限制表单上传大小 8MB,默认为32MB
	r.MaxMultipartMemory = 8 << 20
	r.POST("/uploadMore", func(c *gin.Context) {
		form, err := c.MultipartForm()
		if err != nil {
			c.String(http.StatusBadRequest, fmt.Sprintf("get err %s", err.Error()))
		}
		// 获取所有图片
		files := form.File["files"]
		// 遍历所有图片
		for _, file := range files {
			// 逐个存
			if err := c.SaveUploadedFile(file, "./wenjian/"+file.Filename); err != nil {
				c.String(http.StatusBadRequest, fmt.Sprintf("upload err %s", err.Error()))
				return
			}
		}
		c.String(200, fmt.Sprintf("upload ok %d files", len(files)))
	})
	
   r.Run(":8001")
}

# 单文件上传web页面,127.0.0.1/index

/home/wj/gocode/src/gin/views/index.go

<html>
<head></head>
<body>
<form method="post" action="/upload" enctype="multipart/form-data">
file:<input type="file" name="f1">
<input type="submit" value="Commit">
</form>
</body>

# 多文件上传web页面,127.0.0.1/index2

/home/wj/gocode/src/gin/views/index2.go

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="/uploadMore" method="post" enctype="multipart/form-data">
          上传文件:<input type="file" name="files" multiple>
          <input type="submit" value="提交">
    </form>
</body>
</html>

(完)


(完)