一、依赖

module maingo 1.15require (github.com/gin-contrib/static v0.0.0-20200916080430-d45d9a37d28egithub.com/gin-gonic/gin v1.6.3github.com/go-playground/validator/v10 v10.3.0 // indirectgithub.com/golang/protobuf v1.4.2 // indirectgithub.com/jinzhu/gorm v1.9.16github.com/json-iterator/go v1.1.10 // indirectgithub.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirectgithub.com/modern-go/reflect2 v1.0.1 // indirectgithub.com/ugorji/go v1.1.8 // indirectgolang.org/x/sys v0.0.0-20200918174421-af09f7315aff // indirectgoogle.golang.org/protobuf v1.25.0 // indirectgopkg.in/yaml.v2 v2.3.0 // indirect
)

二、代码

package main// import _ "github.com/jinzhu/gorm/dialects/postgres"
// import _ "github.com/jinzhu/gorm/dialects/sqlite"
// import _ "github.com/jinzhu/gorm/dialects/mssql"
//国内镜像 https://learnku.com/go/wikis/38122
import ("bytes""fmt""io""io/ioutil""log""net/http""os""time""github.com/gin-gonic/gin""github.com/jinzhu/gorm"_ "github.com/jinzhu/gorm/dialects/mysql"
)//变量
var (Database *gorm.DB
)//变量
var _ = log.Printftype Book struct {ID   int    // 列名为 `id`Name string `gorm:"size:255"` // 列名为 `name`Port int    // 列名为 `port`
}func init() {//创建一个数据库的连接var err errordb, err := gorm.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/test?charset=utf8")db.SingularTable(true)if err != nil {panic("failed to connect database")}//迁移the schemadb.AutoMigrate(&Book{})Database = db
}//启动
func main() {router := gin.Default()router.POST("/book", creatBook)router.GET("/books", fetchAllBooks)router.GET("/book/:id", updateBook)router.PUT("/book/:id", fetchSingleBook)router.DELETE("/book/:id", deleteBook)router.POST("/upload_file", HandleUploadFile)router.POST("/upload_muti_file", HandleUploadMutiFile)router.GET("/download", HandleDownloadFile)router.GET("/getUrl", Get)router.Run(":7001")
}// 查询所有
func fetchAllBooks(c *gin.Context) {var dataList []BookDatabase.Find(&dataList)if len(dataList) <= 0 {c.JSON(http.StatusNotFound, gin.H{"status": -1, "result": nil, "message": "No todo found!"})return}c.JSON(200, gin.H{"status": 1, "result": dataList, "message": "Success"})
}//查询
func fetchSingleBook(c *gin.Context) {var data Bookid := c.Param("id")Database.First(&data, id)err := c.ShouldBind(&data)if err != nil {c.JSON(200, gin.H{"status": -1, "result": nil, "message": err.Error()})} else {if data.ID == 0 {c.JSON(http.StatusNotFound, gin.H{"status": http.StatusNotFound, "result": nil, "message": "No todo found!"})return}Database.Model(&data).Updates(&data)c.JSON(200, gin.H{"status": 1, "result": data, "message": "Success"})}}//更新
func updateBook(c *gin.Context) {var data Bookid := c.Param("id")Database.First(&data, id)if data.ID == 0 {c.JSON(http.StatusNotFound, gin.H{"status": http.StatusNotFound, "result": nil, "message": "No todo found!"})return}Database.Model(&data).Updates(&data)c.JSON(200, gin.H{"status": 1, "result": data, "message": "Success"})
}//创建
func creatBook(c *gin.Context) {var book Bookerr := c.ShouldBind(&book)if err != nil {c.JSON(200, gin.H{"status": -1, "result": nil, "message": err.Error()})} else {Database.Save(&book)c.JSON(200, gin.H{"status": 1, "result": book, "message": "Success"})}
}//删除
func deleteBook(c *gin.Context) {var data BooktodoID := c.Param("id")Database.First(&data, todoID)if data.ID == 0 {c.JSON(http.StatusNotFound, gin.H{"status": http.StatusNotFound, "message": "No todo found!"})return}Database.Delete(&data)c.JSON(200, gin.H{"status": 1, "result": data, "message": "Success"})
}//错误
func handleError(err error) {fmt.Println("Error:", err)os.Exit(-1)
}// 发送GET请求
// url:         请求地址
// response:    请求返回的内容
func Get(c *gin.Context) {url := c.Param("url")// 超时时间:5秒client := &http.Client{Timeout: 5 * time.Second}resp, err := client.Get(url)if err != nil {panic(err)}defer resp.Body.Close()var buffer [512]byteresult := bytes.NewBuffer(nil)for {n, err := resp.Body.Read(buffer[0:])result.Write(buffer[0:n])if err != nil && err == io.EOF {break} else if err != nil {panic(err)}}c.JSON(200, gin.H{"status": 1, "result": result.String(), "message": "Success"})
}// HandleUploadFile 上传单个文件
func HandleUploadFile(c *gin.Context) {file, header, err := c.Request.FormFile("file")if err != nil {c.JSON(http.StatusBadRequest, gin.H{"msg": "文件上传失败"})return}content, err := ioutil.ReadAll(file)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"msg": "文件读取失败"})return}fmt.Println(header.Filename)fmt.Println(string(content))c.JSON(http.StatusOK, gin.H{"msg": "上传成功"})
}// HandleUploadMutiFile 上传多个文件
func HandleUploadMutiFile(c *gin.Context) {// 限制上传文件大小c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, 4<<20)// 限制放入内存的文件大小err := c.Request.ParseMultipartForm(4 << 20)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"msg": "文件读取失败"})return}formdata := c.Request.MultipartFormfiles := formdata.File["file"]for _, v := range files {file, err := v.Open()if err != nil {c.JSON(http.StatusBadRequest, gin.H{"msg": "文件读取失败"})return}defer file.Close()content, err := ioutil.ReadAll(file)if err != nil {c.JSON(http.StatusBadRequest, gin.H{"msg": "文件读取失败"})return}fmt.Println(v.Filename)fmt.Println(string(content))}c.JSON(http.StatusOK, gin.H{"msg": "上传成功"})
}// HandleDownloadFile 下载文件
func HandleDownloadFile(c *gin.Context) {content := c.Query("content")content = "hello world, 我是一个文件," + contentc.Writer.WriteHeader(http.StatusOK)c.Header("Content-Disposition", "attachment; filename=hello.txt")c.Header("Content-Type", "application/text/plain")c.Header("Accept-Length", fmt.Sprintf("%d", len(content)))c.Writer.Write([]byte(content))
}

三、sql脚本

DROP TABLE IF EXISTS `book`;
CREATE TABLE `book` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(255) COLLATE utf8_bin DEFAULT NULL,`port` int(255) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

go gin增删改查上传文件下载文件相关推荐

  1. SRT上传文件下载文件

    用 alt + p 打开 sftp 文件传输窗口 然后就是和普通Linux一样的, pwd ls cd 这是在Linux主机上进行移动的目录 lpwd lls lcd 这是在本机上进行移动的目录(实际 ...

  2. 使用TCP协议写的关于ftp_tcp上传文件下载文件显示文件的小项目(一对一)

    server.c服务器端, #include<stdio.h> #include <sys/types.h> /* See NOTES */ #include <sys/ ...

  3. vue结合php增删改查实例,从vue基础开始创建一个简单的增删改查的实例

    1.安装vue-clicnpm install vue-cli -g  --执行全局安装 2.创建一个webpack的基础项目:命令:vue init webpack myproject; 以下是项目 ...

  4. django,form表单,数据库增删改查

    Django 02  复习:   Django下载:    在命令行输入:     pip3 install django==1.11.11     在这里不要用最新的3.7,推荐使用3.6/3.5/ ...

  5. ExtJS EditorGridPanel 示例之Array格式Store前后台增删改查(不支持分页)

    示例入口页面html: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:/ ...

  6. Django完整增删改查系统

    文章目录 一.效果图如下 二.使用步骤 1.创建并配置一个django项目 1.1新建一个项目ch3 1.2创建应用employee 1.3指定ch3项目的应用程序emyployee 1.4与数据库相 ...

  7. C语言文件操作,增删改查

    C语言版文件操作,对文件里的数据进行增删改查后写回到文件. 功能有: 列出文件内容 创建文件 添加记录 更新记录 删除文件 删除指定记录 #include <iostream> #defi ...

  8. Springboot整合JDBC和DBUtils,实现简单的增删改查.

    Springboot整合JDBC和DBUtils,实现简单的增删改查. 一.pom.xml文件 <?xml version="1.0" encoding="UTF- ...

  9. vs2019实现asp.net对SQL Server完整的增删改查

    vs2019实现asp.net对SQL Server完整的增删改查 项目文件目录 img文件夹存放项目需要的图片,本人的数据表是student,当然,完成以下操作还需要成功连接数据库. 数据库连接详解 ...

最新文章

  1. java中JVM的原理【转】
  2. win8 开发之旅(13) --webabcd大师,这事你怎么看? 向webabcd大师致敬。
  3. exfat分配单元大小选多少_安防监控摄像机视角大小和镜头毫米数的基础知识!...
  4. oracle 论坛 千万级表,Oracle千万级记录操作总结
  5. 解三对角线性方程组的追赶法
  6. 【编程珠玑】第九章 代码调优
  7. kalman filter using python
  8. 熊出没之奇幻空间里面的机器人图片_武汉欢乐谷奇幻灯光节12月24日盛大开幕...
  9. Groovy模板引擎
  10. Intellij中Maven项目html页面乱码解决方案
  11. 056 CSRF跨站请求伪造
  12. Windows下linux传盘工具,Windows下安装红旗Linux及工具盘全过程
  13. 毕业答辩ppt怎么做?
  14. 这个网站做数据科学家的FB 但除了社交还做实事
  15. 华为2019春招留学生笔试第三题python
  16. 一天做100张图?只有 AI 能做到!
  17. swiper ie11版本兼容调整
  18. 【案例】电影数据分析
  19. win10将HTML动态做桌面壁纸,用win10自带工具,win10专业版简易制作动态壁纸教程...
  20. python可视化---阶梯图step()

热门文章

  1. 工程项目计算机协同管理系统AUTODESK BUZZSAW平台在世博中心项目建设中的运用
  2. php多张图合成一张图,PHP中多张图片合成一张图片例子
  3. 在ubuntu下配置Defects4j
  4. Druid(德鲁伊)数据库连接池
  5. 日程信息管理系统设计与实现C 语言论文,C课设个人日程管理系统.docx
  6. 高精度定位系统服务器,5G+UWB智慧工厂高精度定位解决方案
  7. Deep Splitting and Merging for Table Structure Decomposition 中文翻译 (表格结构识别)
  8. Ubuntu下清理系统垃圾
  9. centos7.4安装指导书--基于华为服务器
  10. qq私聊顺序回复_来自对于QQ神秘代码的疑惑??