Gin框架文件操作使用

摘要:
Gin不提供用于创建、删除、读取和写入文件的特殊接口,因此它使用常用的ioutil包来读取和写入,使用os包来创建和删除文件=Nil{c.JSONfmt.Printturn}defer。Close()//结果c JSONreturn}注意,您应该首先创建相应的文件目录,或者通过执行以下代码手动创建文件:request输出结果:4.编写文件:/*将内容写入文件**/funcFilerWrite{//声明接收到的变量vardataFileData//自动将请求体中的数据解析为结构ifer:=c.ShouldBindJSON;err!

Gin 并没有提供文件的创建,删除,读写这个操作的专门的接口,所以采用的是常用的ioutil这个包进行文件的读写操作,使用os这个包进行文件的创建和删除。

文件的创建,写入内容,读取内容,删除.(此实例使用的是txt文件):

1.在controller下面新建一个fileopt.go,作为实现文件操作的业务逻辑部分

Gin框架文件操作使用第1张

2.在router.go路由器中添加文件操作的路由:

Gin框架文件操作使用第2张

//文件的创建删除和读写
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
}

请求输出结果:

Gin框架文件操作使用第3张

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
}

这里注意要先创建对应存放文件目录,或者代码执行手动创建:

Gin框架文件操作使用第4张

请求输出结果:

Gin框架文件操作使用第5张

Gin框架文件操作使用第6张

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
}

请求输出结果:

Gin框架文件操作使用第7张

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
}

请求输出结果:

Gin框架文件操作使用第8张

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
}

请求输出结果:

Gin框架文件操作使用第9张

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

免责声明:文章转载自《Gin框架文件操作使用》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇windows下使用Wireshark调试chrome浏览器的HTTP/2流量mysql设置连接等待时间(wait_timeout)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(六)Android中Service通信

一、启动Service并传递参数 传递参数时只需在startService启动的Intent中传入数据便可,接收参数时可在onStartCommand函数中通过读取第一个参数Intent的内容来实现 1.MainActivity.java package com.example.shiyanshi.serviceconnected;import andro...

使用vue做项目如何提高代码效率

最近做了两个vue项目,算上之前做的两个项目,总共有四个vue项目的经验了,但是总体来说写的代码质量不是很高,体现在以下几点 1.代码没有高效的复用   自从使用vue做项目之后,以前使用面向过程变成的习惯随之被面向对象取代了,这是一个很好的转变,让代码看起来不是那么混乱了,但是不混乱并不代表质量高,比如实现一个检验输入是否有效的功能写的代码很长,而且重复...

mysql 5.7 迁移数据方案

从一台服务器迁移至其他服务器,如何选择最短的停服时间方案 方案一、凌晨3点的全备份+停服后一天的大概一天的增备   1. 拷贝前一天的全备份至新的服务器    rsync -auzrP /Data/dbbak/db/2019-04-23/2019-04-23_03-10-11 root@172.16.1.80:/data/backup/full/   2....

Dubbo封装rest服务返回结果

由于Dubbo服务考虑到一个是给其他系统通过RPC调用,另外一个是提供HTTP协议本身系统的后台管理页面,因此Dubbo返回参数在rest返回的时候配置拦截器进行处理。 在拦截器中,对返回参数封装成如下对象,并统一输出到前端。 1 packagecom.wjs.common.web; 2 3 importorg.apache.commons.lang....

mysql中的data下的数据文件(.FRM、.MYD、.MYI)恢复为数据

记一次mysql中的data文件操作经历 想拿到一个项目的最新的数据,做功能升级使用,备份一份数据同时也作为本地测试数据,文件有些大,我直接通过远程的phpmyadmin程序导出,不能愉快的玩耍,直接联系了IDC的同事帮忙导一份sql文件出来一下,结果那哥们没得直接扔给了我data文件,这让我如何是好,这个问题我没遇见过啊。处于面子问题,又不好意思再让他重...

Python requests关于爬虫下载下来的数据乱码问题

1.html下载后乱码 直接用浏览器检查原网页的编码,然后把你下载下来的网页数据设置为网页上显示的编码,result.encoding=“网页上的编码” 2.直接获取api的json数据乱码 最近几年网页传输出现了新的br压缩方式,在请求的时候如果你的headers里面Accept-Encoding是“gzip, deflate, br”, headers...