|
@@ -1,56 +1,56 @@
|
|
|
package imguploader
|
|
package imguploader
|
|
|
|
|
|
|
|
import (
|
|
import (
|
|
|
- "github.com/grafana/grafana/pkg/log"
|
|
|
|
|
- "github.com/grafana/grafana/pkg/util"
|
|
|
|
|
- "google.golang.org/api/option"
|
|
|
|
|
- "cloud.google.com/go/storage"
|
|
|
|
|
- "golang.org/x/net/context"
|
|
|
|
|
- "io/ioutil"
|
|
|
|
|
- "fmt"
|
|
|
|
|
|
|
+ "cloud.google.com/go/storage"
|
|
|
|
|
+ "fmt"
|
|
|
|
|
+ "github.com/grafana/grafana/pkg/log"
|
|
|
|
|
+ "github.com/grafana/grafana/pkg/util"
|
|
|
|
|
+ "golang.org/x/net/context"
|
|
|
|
|
+ "google.golang.org/api/option"
|
|
|
|
|
+ "io/ioutil"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
type GCPUploader struct {
|
|
type GCPUploader struct {
|
|
|
- keyFile string
|
|
|
|
|
- bucket string
|
|
|
|
|
- log log.Logger
|
|
|
|
|
|
|
+ keyFile string
|
|
|
|
|
+ bucket string
|
|
|
|
|
+ log log.Logger
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func NewGCPUploader(keyFile, bucket string) *GCPUploader {
|
|
func NewGCPUploader(keyFile, bucket string) *GCPUploader {
|
|
|
- return &GCPUploader{
|
|
|
|
|
- keyFile: keyFile,
|
|
|
|
|
- bucket: bucket,
|
|
|
|
|
- log: log.New("gcpuploader"),
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return &GCPUploader{
|
|
|
|
|
+ keyFile: keyFile,
|
|
|
|
|
+ bucket: bucket,
|
|
|
|
|
+ log: log.New("gcpuploader"),
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
func (u *GCPUploader) Upload(imageDiskPath string) (string, error) {
|
|
func (u *GCPUploader) Upload(imageDiskPath string) (string, error) {
|
|
|
- ctx := context.Background()
|
|
|
|
|
|
|
+ ctx := context.Background()
|
|
|
|
|
|
|
|
- client, err := storage.NewClient(ctx, option.WithServiceAccountFile(u.keyFile))
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return "", err
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ client, err := storage.NewClient(ctx, option.WithServiceAccountFile(u.keyFile))
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return "", err
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- key := util.GetRandomString(20) + ".png"
|
|
|
|
|
- log.Debug("Uploading image to GCP bucket = %s key = %s", u.bucket, key)
|
|
|
|
|
|
|
+ key := util.GetRandomString(20) + ".png"
|
|
|
|
|
+ log.Debug("Uploading image to GCP bucket = %s key = %s", u.bucket, key)
|
|
|
|
|
|
|
|
- file, err := ioutil.ReadFile(imageDiskPath)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return "", err
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ file, err := ioutil.ReadFile(imageDiskPath)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return "", err
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- wc := client.Bucket(u.bucket).Object(key).NewWriter(ctx)
|
|
|
|
|
- wc.ContentType = "image/png"
|
|
|
|
|
- wc.ACL = []storage.ACLRule{{Entity: storage.AllUsers, Role: storage.RoleReader}}
|
|
|
|
|
|
|
+ wc := client.Bucket(u.bucket).Object(key).NewWriter(ctx)
|
|
|
|
|
+ wc.ContentType = "image/png"
|
|
|
|
|
+ wc.ACL = []storage.ACLRule{{Entity: storage.AllUsers, Role: storage.RoleReader}}
|
|
|
|
|
|
|
|
- if _, err := wc.Write(file); err != nil {
|
|
|
|
|
- return "", err
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if _, err := wc.Write(file); err != nil {
|
|
|
|
|
+ return "", err
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- if err := wc.Close(); err != nil {
|
|
|
|
|
- return "", err
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ if err := wc.Close(); err != nil {
|
|
|
|
|
+ return "", err
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- return fmt.Sprintf("https://storage.googleapis.com/%s/%s", u.bucket, key), nil
|
|
|
|
|
|
|
+ return fmt.Sprintf("https://storage.googleapis.com/%s/%s", u.bucket, key), nil
|
|
|
}
|
|
}
|