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 }
請求輸出結果:
這就是對於文件的一個簡單操作。