store/s3.go (39 lines of code) (raw):
package store
import (
"context"
"io"
"log"
"github.com/aws/aws-sdk-go-v2/service/s3"
)
type S3 struct {
client *s3.Client
bucket string
prefix string
}
func NewS3(client *s3.Client, bucket, prefix string) S3 {
return S3{
client: client,
bucket: bucket,
prefix: prefix,
}
}
// Get retrieves a single object from S3
func (store S3) Get(key string) ([]byte, error) {
fullKey := store.prefix + "/" + key
result, err := store.client.GetObject(context.Background(), &s3.GetObjectInput{
Bucket: &store.bucket,
Key: &fullKey,
})
if err != nil {
return nil, err
}
data, err := io.ReadAll(result.Body)
if err != nil {
return nil, err
}
defer func() {
if cerr := result.Body.Close(); cerr != nil {
log.Printf("failed to close result body: %v", cerr)
}
}()
return data, nil
}