-
Notifications
You must be signed in to change notification settings - Fork 0
/
s3.go
61 lines (50 loc) · 1.14 KB
/
s3.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
package kitsune
import (
"bytes"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/service/s3"
"github.com/aws/aws-sdk-go/service/s3/s3iface"
"github.com/google/uuid"
"io/ioutil"
)
type fileEvent struct {
Size *int64 `json:"size,omitempty"`
Bucket *string `json:"bucket,omitempty"`
Filename *string `json:"filename,omitempty"`
}
type s3Client struct {
awsS3 s3iface.S3API
}
func newS3Client(awsS3 s3iface.S3API) *s3Client {
return &s3Client{
awsS3: awsS3,
}
}
func (s *s3Client) putObject(bucket *string, payload []byte) (*fileEvent, error) {
key := uuid.New().String()
poi := &s3.PutObjectInput{
Body: bytes.NewReader(payload),
Bucket: bucket,
Key: &key,
}
fe := &fileEvent{
Size: aws.Int64(int64(len(payload))),
Bucket: bucket,
Filename: &key,
}
_, err := s.awsS3.PutObject(poi)
return fe, err
}
func (s *s3Client) getObject(fe *fileEvent) ([]byte, error) {
goi := &s3.GetObjectInput{
Bucket: fe.Bucket,
Key: fe.Filename,
}
goo, err := s.awsS3.GetObject(goi)
if err != nil {
return nil, err
}
defer goo.Body.Close()
payload, err := ioutil.ReadAll(goo.Body)
return payload, err
}