amazon-web-services - base64 编码 io.Reader

标签 amazon-web-services go base64

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

我看到在encoding/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 Uploader,它采用 io.Reader 接口(interface)。

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

input需要实现io.Reader接口(interface)

数据很大,所以不想在编码前把输入全部读入内存

最佳答案

管道的概念用于将读取器更改为写入器,反之亦然。

使用 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

关于amazon-web-services - base64 编码 io.Reader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49135097/

相关文章:

go - kapacitor不运行表明失败

golang pprof堆计数含义

go - Go 编程语言中的 For 循环

Java在jsp中显示基本64字节数组

amazon-web-services - Amazon Redshift 和新的 AWS Glue 数据仓库服务之间有什么区别?

amazon-web-services - aws ssm 发送命令在 Ubuntu 服务器中不起作用

node.js - AWS Lambda 可以与外部互联网服务通话吗?

mysql - 从 ECS Fargate WordPress 容器到 RDS MySql 的连接超时

.net - 反序列化 base64 编码的字节数组在 2 个 JSON.net 库版本中返回不同的结果

iphone - NSString 的 Base64 编码