2017-02-09 68 views
0

我从s3使用go sdk获取文件。 尽管响应指示ContentLength,但实际从身体读取不会填充我的缓冲区。S3 GetObject返回内容,但从身体读取不填充缓冲区

响应

{ 
AcceptRanges: "bytes", 
Body: buffer(0xc0421d6cc0), 
ContentEncoding: "utf-8", 
ContentLength: 13, 
ContentType: "application/json", 
ETag: "\"a15ce1024b219fd76684ba1561d23ccc\"", 
LastModified: 2017-02-09 15:16:45 +0000 UTC, 
Metadata: { 
} 
} 

代码

var buf []byte 

r, err := resp.Body.Read(buf) 
if err != nil { 
    return "", err 
} 
defer resp.Body.Close() 

fmt.Printf("read %d, buff %d", r, len(buf)) 

"read 0, buff 0"

+1

你的缓冲区是零,所以你什么也没读。我想你正在寻找['ioutil.ReadAll']的功能(https://golang.org/pkg/io/ioutil/#ReadAll)。 – JimB

+0

@JimB谢谢就是这样。你可以添加一个答案,所以我可以upvote,如果你喜欢 – Mantzas

回答

2

一种io.Reader需要一个切片到读入。如果您不提供任何缓冲空间,则不会读取任何内容。

如果要将整个流读入内存,则可以使用便利功能ioutil.ReadAll