aws-sdk-goでs3にput/get
golangaws-sdk-goでS3にputしてgetする。
package main
import (
"bytes"
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/s3"
)
const REGION = "ap-northeast-1"
const BUCKET_NAME = "faweijojio4f3e4"
func main() {
sess, err := session.NewSession(aws.NewConfig().WithRegion(REGION))
if err != nil {
fmt.Println(err.Error())
return
}
svc := s3.New(sess)
// put
data := []byte("BBBBBB")
key := "AAA.txt"
params := &s3.PutObjectInput{
Bucket: aws.String(BUCKET_NAME),
Key: aws.String(key),
Body: bytes.NewReader(data),
ContentLength: aws.Int64(int64(len(data))),
ContentType: aws.String("text/plain"),
}
if _, err = svc.PutObject(params); err != nil {
fmt.Println(err.Error())
return
}
// bucket list
keys := []string{}
err = svc.ListObjectsPages(&s3.ListObjectsInput{
Bucket: aws.String(BUCKET_NAME),
}, func(p *s3.ListObjectsOutput, last bool) (shouldContinue bool) {
for _, obj := range p.Contents {
keys = append(keys, *obj.Key)
fmt.Println(*obj.Key)
}
return true
})
if err != nil {
fmt.Println(err.Error())
return
}
// get
resp, err2 := svc.GetObject(&s3.GetObjectInput{
Bucket: aws.String(BUCKET_NAME),
Key: aws.String(keys[0]),
})
if err2 != nil {
fmt.Println(err2.Error())
return
}
buf := new(bytes.Buffer)
buf.ReadFrom(resp.Body)
fmt.Println(keys[0] + " -> " + buf.String())
}
$ AWS_ACCESS_KEY_ID=**** AWS_SECRET_ACCESS_KEY=**** go run main.go
AAA.txt
bbbb.txt
AAA.txt -> BBBBBB