Gin 并没有提供文件的创建,删除,读写这个操作的专门的接口,所以采用的是常用的ioutil这个包进行文件的读写操作,使用os这个包进行文件的创建和删除。
文件的创建,写入内容,读取内容,删除.(此实例使用的是txt文件):
1.在controller下面新建一个fileopt.go,作为实现文件操作的业务逻辑部分:
2.在router.go路由器中添加文件操作的路由:
//文件的创建删除和读写 router.GET("/cont/filerw", controllers.Filerwhtml) //获取文件api操作信息 router.POST("/cont/addfile", controllers.FilerCreate) //创建文件 router.POST("/cont/writefile", controllers.FilerWrite) //写入文件 router.POST("/cont/readfile", controllers.FilerRead) //读取文件 router.POST("/cont/deletefile", controllers.FilerDelete) //删除文件
3.获取文件api操作信息:
package controllers import ( "fmt" "github.com/gin-gonic/gin" "io/ioutil" "net/http" "os" ) // 定义接收数据的结构体 type FileData struct { // binding:"required"修饰的字段,若接收为空值,则报错,是必须字段 FileName string `form:"filename" json:"filename" uri:"filename" xml:"filename" binding:"required"` Content string `form:"content" json:"content" uri:"content" xml:"content"` } //文件操作接口信息 type Data struct { Api string `json:"api"` Params string `json:"params"` Remark string `json:"remark"` } /**文件读写操作接口信息**/ func Filerwhtml(c *gin.Context) { list := []Data{ Data{ "/cont/addfile", "filename", "创建文件", }, Data{ "/cont/writefile", "filename,content", "写入文件", }, Data{ "/cont/readfile", "filename", "读取文件", }, Data{ "/cont/deletefile", "filename", "删除文件", }, } //返回结果 c.JSON(http.StatusOK, gin.H{"code": 0, "list": list}) return }
请求输出结果:
3.创建文件:
/**创建文件**/ func FilerCreate(c *gin.Context) { // 声明接收的变量 var data FileData // 将request的body中的数据,自动按照json格式解析到结构体 if err := c.ShouldBindJSON(&data); err != nil { // 返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusMovedPermanently, gin.H{"code:": 1, "msg: ": err.Error()}) return } //创建文件 path := fmt.Sprintf("static/txtfile/%s.txt", data.FileName) f, err := os.Create(path) fmt.Print(path) if err != nil { c.JSON(http.StatusMovedPermanently, gin.H{"code:": 1, "msg: ": "创建文件失败"}) fmt.Print(err.Error()) return } defer f.Close() //返回结果 c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "创建成功", "filename": data.FileName}) return }
这里注意要先创建对应存放文件目录,或者代码执行手动创建:
请求输出结果:
4.写入文件:
/**将内容写入文件**/ func FilerWrite(c *gin.Context) { // 声明接收的变量 var data FileData // 将request的body中的数据,自动按照json格式解析到结构体 if err := c.ShouldBindJSON(&data); err != nil { // 返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusMovedPermanently, gin.H{"code:": 1, "msg: ": err.Error()}) return } //需要写入到文件的内容 content := data.Content path := fmt.Sprintf("static/txtfile/%s.txt", data.FileName) d1 := []byte(content) err := ioutil.WriteFile(path, d1, 0644) fmt.Print(path) if err != nil { c.JSON(http.StatusMovedPermanently, gin.H{"code:": 1, "msg: ": "写入内容失败"}) fmt.Print(err.Error()) return } //返回结果 c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "写入内容成功", "filename": data.FileName, "content": content}) return }
请求输出结果:
5.读取文件:
/**读取文件内容**/ func FilerRead(c *gin.Context) { // 声明接收的变量 var data FileData // 将request的body中的数据,自动按照json格式解析到结构体 if err := c.ShouldBindJSON(&data); err != nil { // 返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusMovedPermanently, gin.H{"code:": 1, "msg: ": err.Error()}) return } path := fmt.Sprintf("static/txtfile/%s.txt", data.FileName) //文件读取任务是将文件内容读取到内存中。 info, err := ioutil.ReadFile(path) fmt.Print(path) if err != nil { c.JSON(http.StatusMovedPermanently, gin.H{"code:": 1, "msg: ": "读取文件内容失败"}) fmt.Print(err.Error()) return } fmt.Println(info) result := string(info) //返回结果 c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "读取内容成功", "filename": data.FileName, "content": result}) return }
请求输出结果:
6.删除文件:
/**删除文件**/ func FilerDelete(c *gin.Context) { // 声明接收的变量 var data FileData // 将request的body中的数据,自动按照json格式解析到结构体 if err := c.ShouldBindJSON(&data); err != nil { // 返回错误信息 // gin.H封装了生成json数据的工具 c.JSON(http.StatusMovedPermanently, gin.H{"code:": 1, "msg: ": err.Error()}) return } path := fmt.Sprintf("static/txtfile/%s.txt", data.FileName) //源文件路径 //删除文件 cuowu := os.Remove(path) fmt.Print(path) if cuowu != nil { //如果删除失败则输出 file remove Error! fmt.Println("file remove Error!") //输出错误详细信息 fmt.Printf("%s", cuowu) c.JSON(http.StatusMovedPermanently, gin.H{"code:": 1, "msg: ": "删除文件失败"}) return } else { //如果删除成功则输出 file remove OK! fmt.Print("file remove OK!") } //返回结果 c.JSON(http.StatusOK, gin.H{"code": 0, "msg": "删除文件成功", "filename": data.FileName}) return }
请求输出结果:
这就是对于文件的一个简单操作。