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
}

请求输出结果:

这就是对于文件的一个简单操作。

posted on 2021-07-25 15:34  进击的qing  阅读(1415)  评论(0编辑  收藏  举报