zoukankan      html  css  js  c++  java
  • 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
    }

    请求输出结果:

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

    进击的qing
  • 相关阅读:
    kvm virtio
    GPU 线程块/线程束
    ubuntu source
    React
    分布式系统
    honpeyhonepy
    css是干什么的
    bootstrap中的横的列
    数据安全之 alert logic
    viewset的使用的方法
  • 原文地址:https://www.cnblogs.com/qingfj/p/15057950.html
Copyright © 2011-2022 走看看