/
store.go
91 lines (72 loc) · 2.21 KB
/
store.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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
package store
import (
"fmt"
"github.com/mitchellh/goamz/aws"
"github.com/mitchellh/goamz/s3"
"io"
"io/ioutil"
"mime"
"os"
)
func CreateBucket() *s3.Bucket {
auth, err := aws.EnvAuth()
if err != nil {
println("store -- error connecting to AWS\n")
panic(err)
}
fmt.Printf("store -- connected to AWS\n")
awsRegion := os.Getenv("STORE_AWSREGION")
if awsRegion == "" {
println("store -- error: environment variable STORE_AWSREGION not set")
panic("store -- STORE_AWSREGION not set")
}
region := aws.Regions[awsRegion]
if region.Name == "" {
panic("store -- region '" + awsRegion + "' is invalid")
}
println("store -- AWS region: " + region.Name)
S3 := s3.New(auth, aws.Regions["eu-west-1"])
bucketName := os.Getenv("STORE_BUCKETNAME")
if bucketName == "" {
println("store -- error: environment variable STORE_BUCKETNAME not set")
panic("store -- STORE_BUCKETNAME not set")
}
bucket := S3.Bucket(bucketName)
println("store -- Bucket name: " + bucket.Name)
return bucket
}
func Upload(directory string, filename string) {
println("store -- Upload called with filename " + filename)
bucket := CreateBucket()
data, err := ioutil.ReadFile(directory + filename)
if err != nil {
println("store -- error reading file '" + directory + filename + "'")
panic(err)
}
extension := filename[(len(filename) - 4):]
err = bucket.Put(filename, data, mime.TypeByExtension(extension), s3.PublicRead)
if err != nil {
println("store -- error during bucket PUT")
panic(err)
}
}
func UploadReader(filename string, data io.Reader, dataLength int64) {
println("store -- UploadReader called with filename " + filename)
bucket := CreateBucket()
extension := filename[(len(filename) - 4):]
err := bucket.PutReader(filename, data, dataLength, mime.TypeByExtension(extension), s3.PublicRead)
if err != nil {
println("store -- error during bucket PUT using PutReader")
panic(err)
}
}
func Download(filename string) io.ReadCloser {
println("store -- Download called with filename " + filename)
bucket := CreateBucket()
rc, err := bucket.GetReader(filename)
if err != nil {
println("store -- error during bucket GET")
panic(err)
}
return rc
}