gin参数接收与文件上传下载,gorm

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"net/http"
)

type Person struct {
	Id   int    `form:"id" json:"id" uri:"id" xml:"id" gorm:""`
	Name string `form:"name" json:"name" uri:"name"  xml:"name"`
	Age  int    `form:"age" json:"age" uri:"age" xml:"age"`
	Sex  string `form:"sex" json:"sex" uri:"sex" xml:"sex"`
}

func (p *Person) TableName() string {
	return "got_person"
}
func main() {
	dsn := "root:mysql@tcp(127.0.0.1:3306)/test_gorm?charset=utf8mb4&parseTime=True&loc=Local"
	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
	if err != nil {
		panic(err)
	}

	db.AutoMigrate(&Person{})
	p := Person{
		Name: "汉三",
		Age:  18,
		Sex:  "女",
	}
	//添加一条记录
	db.Create(&p)
	//批量查询
	var persons []Person
	db.Where("id in (?)", []int{1, 2}).Find(&persons)
	fmt.Println(persons)
	//分页查询
	db.Limit(10).Offset(2).Where("id >?", 1).Find(&persons)
	fmt.Println(persons)
	var one Person
	db.Where("id =?", 1).First(&one)
	fmt.Println(one)
	//修改单个属性
	err = db.Where("id =?", 1).First(&one).Update("name", "lisi", "age", 23).Error
	if err != nil {
		fmt.Println(err)
	}
	//通过map修改多个字段
	err = db.Where("id =?", 3).First(&Person{}).Updates(map[string]interface{}{
		"name": "hello",
		"age":  45,
	}).Error
	if err != nil {
		fmt.Println(err)
	}
	//通过结构体修改多个字段
	err = db.Where("id =?", 1).First(&one).Updates(Person{
		Name: "王五",
		Age:  23,
		Sex:  "女",
	}).Error
	if err != nil {
		fmt.Println(err)
	}
	//删除,Unscoped()物理删除
	db.Where("id=?", 2).Unscoped().Delete(&Person{})

	router := gin.Default()
	router.GET("/", func(c *gin.Context) {
		c.JSON(http.StatusOK, gin.H{
			"code": 0,
			"data": map[string]interface{}{
				"name": "占山",
			},
			"message": "请求成功",
		})
	})
	//http://localhost:8080/bindUri/12/战三/28/男
	router.GET("/bindUri/:id/:name/:age/:sex", func(c *gin.Context) {
		name := c.Query("name")
		var p = Person{}
		//	err := c.ShouldBindJSON(&p)
		err := c.BindUri(&p)
		if err != nil {
			fmt.Println(err)
		}
		c.JSON(http.StatusOK, gin.H{
			"code": 0,
			"data": map[string]interface{}{
				"name": name,
			},
			"person":  p,
			"message": "请求成功",
		})
	})
	//http://localhost:8080/param?name=zhansan&id=12&age=28&sex=男
	router.GET("/param", func(c *gin.Context) {
		name := c.Query("name")
		var p = Person{}
		//	err := c.ShouldBindJSON(&p)
		err := c.BindQuery(&p)
		if err != nil {
			fmt.Println(err)
		}
		c.JSON(http.StatusOK, gin.H{
			"code": 0,
			"data": map[string]interface{}{
				"name": name,
			},
			"person":  p,
			"message": "请求成功",
		})
	})
	/**
	POST
	http://localhost:8080/post
	  {
	       "id": 12,
	          "name": "占山",
	          "age":18,
	          "sex": "男"
	  }
	*/
	router.POST("/post", func(c *gin.Context) {
		name := c.Query("name")
		fmt.Println(name)
		var p = Person{}
		err := c.ShouldBindJSON(&p)

		if err == nil {
			fmt.Println(err)
		}
		c.JSON(http.StatusOK, gin.H{
			"code": 0,
			"data": map[string]interface{}{
				"name": "占山",
			},
			"person":  p,
			"message": "请求成功",
		})
	})

	router.POST("/upload", func(c *gin.Context) {
		file, err := c.FormFile("file")
		if err != nil {

		}
		name := c.PostForm("name")
		c.SaveUploadedFile(file, "d:/"+file.Filename)
		c.JSON(http.StatusOK, gin.H{
			"code":    "ok",
			"data":    file.Filename,
			"message": "上传成功",
			"name":    name,
		})
	})

	router.POST("/uploadDown", func(c *gin.Context) {
		file, err := c.FormFile("file")
		if err != nil {

		}

		c.SaveUploadedFile(file, "d:/"+file.Filename)
		name := c.PostForm("name")
		fmt.Println(name)
		//c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", "test"))//fmt.Sprintf("attachment; filename=%s", filename)对下载的文件重命名
		//c.Writer.Header().Add("Content-Type", "application/octet-stream")
		c.Writer.Header().Add("Content-Disposition", fmt.Sprintf("attachment; filename=%s", file.Filename))
		//_, _ = io.Copy(c.Writer, reader)
		c.File("d:/" + file.Filename)
	})

	router.POST("/uploads", func(c *gin.Context) {
		form, err := c.MultipartForm()
		if err != nil {

		}
		files := form.File["file"]
		for _, fv := range files {
			//fmt.Println(i, fv)
			c.SaveUploadedFile(fv, "d:/"+fv.Filename)
		}

		c.JSON(http.StatusOK, gin.H{
			"code":    "ok",
			"data":    "sdf",
			"message": "上传成功",
		})
	})
	router.Run(":8081")
}

你可能感兴趣的:(golang,gin,json,java)