| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package imguploader
- import (
- "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 {
- keyFile string
- bucket string
- log log.Logger
- }
- func NewGCPUploader(keyFile, bucket string) *GCPUploader {
- return &GCPUploader{
- keyFile: keyFile,
- bucket: bucket,
- log: log.New("gcpuploader"),
- }
- }
- func (u *GCPUploader) Upload(imageDiskPath string) (string, error) {
- ctx := context.Background()
- 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)
- 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}}
- if _, err := wc.Write(file); 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
- }
|