base64编码io.Reader

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了base64编码io.Reader相关的知识,希望对你有一定的参考价值。

有没有办法获取包含二进制数据的io.Reader,并将其读出base64编码。

我在编码/ base64中看到了

func NewDecoder(enc *Encoding, r io.Reader) io.Reader

但是假设io.Reader数据是base64并返回一个io.Reader来将其解码为二进制。

func NewEncoder(enc *Encoding, w io.Writer) io.WriteCloser

返回一个io.Writer来将二进制编码为base64,但是我需要使用go-aws-sdk s3manage上传器,它需要一个io.Reader接口。

uploader := s3manager.NewUploaderWithClient(svc)
_, err := uploader.Upload(&s3manager.UploadInput{
   Bucket: aws.String(bucket),
  Key:    aws.String(key),
  Body:   input,
})

输入需要实现io.Reader接口

数据很大,所以我不想在进行编码之前将输入完全读入内存

答案

Pipe的概念用于将读者更改为Writers,反之亦然。

使用io.Pipe,您可以将源io.Reader复制到编码器中,并将io.PipeReader作为要上传的正文传递。

如果你想通过它,错误处理有点不寻常,但可以使用CloseWithError方法。确保您还记下关闭管道和编码器的正确顺序。

source := strings.NewReader("Hello, World!")

pr, pw := io.Pipe()
encoder := base64.NewEncoder(base64.StdEncoding, pw)

go func() {
    _, err := io.Copy(encoder, source)
    encoder.Close()

    if err != nil {
        pw.CloseWithError(err)
    } else {
        pw.Close()
    }
}()

https://play.golang.org/p/qvc1f7kyTeP

以上是关于base64编码io.Reader的主要内容,如果未能解决你的问题,请参考以下文章

将base64编码的Textmate片段过滤回文本

C#解码base64编码的二进制数据的代码

使用OpenSSL进行Base64编码和解码

令仔代码收藏系列----BASE64编码

什么是BASE64编码?

用于解码/编码修改后的 base64 URL 的代码