GIN复制字节流

正常读取字节流(直接读空)

func ReadData(c *gin.Context) {
    // 这样读取字节流之后,整个c.request.body就已经读空啦。再次无法读到数据。
    data, err := ioutil.ReadAll(c.Request.Body)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(string(data))
    // 再次读取
    data, _ = ioutil.ReadAll(c.Request.Body)
    fmt.Println(string(data)) // 无数据
}

复制字节流

func ReadData(c *gin.Context) {
    // 这样读取字节流之后,整个c.request.body就已经读空啦。再次无法读到数据。
    data, err := ioutil.ReadAll(c.Request.Body)
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(string(data))
    // 再次读取数据(复制字节流)
    c.Request.Body = ioutil.NopCloser(bytes.NewReader(data))
    data, _ = ioutil.ReadAll(c.Request.Body)
    fmt.Println(string(data)) // 有数据
}

你可能感兴趣的:(GIN复制字节流)