为了账号安全,请及时绑定邮箱和手机立即绑定

Gzip 未压缩的 http.Response.Body

Gzip 未压缩的 http.Response.Body

Go
猛跑小猪 2021-10-18 14:23:26
我正在构建一个 Go 应用程序,它接受一个http.Response对象并将其(响应头和正文)保存到 redis 哈希中。当应用程序收到一个http.Response.Body未压缩的文件时,我想在将其保存到缓存之前对其进行 gzip。我的困惑源于我无法清楚地了解 Go 的io接口,以及如何在http.Response.Body'sio.ReadCloser和 gzip之间进行协商Writer。我想这里有一个优雅的流媒体解决方案,但我无法让它发挥作用。
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

v

如果你已经确定身体无压缩,如果你需要一个[]byte压缩的数据(而不是例如已经有一个io.Writer你可以写,例如,如果你想身体保存到一个文件,那么你会希望流到文件而不是缓冲区)然后这样的事情应该工作:


func getCompressedBody(r *http.Response) ([]byte, error) {

    var buf bytes.Buffer

    gz := gzip.NewWriter(&buf)

    if _, err := io.Copy(gz, r.Body); err != nil {

        return nil, err

    }

    err := gz.Close()

    return buf.Bytes(), err

}

(这只是一个例子,可能是内联的,而不是作为一个函数;如果你想要它作为一个函数,那么它可能应该使用 anio.Reader而不是 an *http.Response)。


查看完整回答
反对 回复 2021-10-18
  • 1 回答
  • 0 关注
  • 188 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信