store/s3.go (34 lines of code) (raw):
package store
import (
"context"
"io"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
type S3 struct {
bucket string
prefix string
client *s3.Client
}
func New(client *s3.Client, bucket, prefix string) S3 {
return S3{
client: client,
bucket: bucket,
prefix: prefix,
}
}
func (store S3) Get(key string) ([]byte, error) {
fullKey := store.prefix + "/" + key
res, err := store.client.GetObject(context.Background(), &s3.GetObjectInput{
Bucket: &store.bucket,
Key: &fullKey,
})
if err != nil {
return nil, err
}
data, err := io.ReadAll(res.Body)
if err != nil {
return nil, err
}
defer res.Body.Close()
return data, nil
}