2017-02-09 57 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