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的主要内容,如果未能解决你的问题,请参考以下文章