2017-02-09 2 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 благодарит его. Вы можете добавить ответ, чтобы я мог повышать, если вам нравится – Mantzas

ответ

2

io.Reader требует кусочек для чтения в. Если вы не предоставите буферное пространство, ничего не будет прочитано.

Если вы хотите прочитать весь поток в памяти, вы можете использовать функцию удобства ioutil.ReadAll.