Я использую пакет Goamz и могу использовать некоторую помощь, получая bucket.Multi
, чтобы передать ответ HTTP GET на S3.Golang multipart загружает с chunked `http.GET` и Goamz` multi.PutAll`
Я загружу файл 2+ GB через chunked HTTP, и я хотел бы передать его прямо в ведро S3.
Оказалось, что мне нужно обернуть resp.Body
с чем-то, так что я могу передать реализацию s3.ReaderAtSeeker
в multi.PutAll
// set up s3
auth, _ := aws.EnvAuth()
s3Con := s3.New(auth, aws.USEast)
bucket := s3Con.Bucket("bucket-name")
// make http request to URL
resp, err := http.Get(export_url)
if err != nil {
fmt.Printf("Get error %v\n", err)
return
}
defer resp.Body.Close()
// set up multi-part
multi, err := bucket.InitMulti(s3Path, "text/plain", s3.Private, s3.Options{})
if err != nil {
fmt.Printf("InitMulti error %v\n", err)
return
}
// Need struct that implements: s3.ReaderAtSeeker
// type ReaderAtSeeker interface {
// io.ReaderAt
// io.ReadSeeker
// }
rs := // Question: what can i wrap `resp.Body` in?
parts, err := multi.PutAll(rs, 5120)
if err != nil {
fmt.Printf("PutAll error %v\n", err)
return
}
err = multi.Complete(parts)
if err != nil {
fmt.Printf("Complete error %v\n", err)
return
}
В настоящее время я получаю следующее (ожидаемое) сообщение об ошибке при попытке запустить мою программу:
./main.go:50: cannot use resp.Body (type io.ReadCloser) as type s3.ReaderAtSeeker in argument to multi.PutAll:
io.ReadCloser does not implement s3.ReaderAtSeeker (missing ReadAt method)