Gin框架文件操作使用


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
}

請求輸出結果:

這就是對於文件的一個簡單操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM