imguploader.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package imguploader
  2. import (
  3. "io/ioutil"
  4. "net/http"
  5. "github.com/grafana/grafana/pkg/util"
  6. "github.com/kr/s3/s3util"
  7. )
  8. type Uploader interface {
  9. Upload(path string) (string, error)
  10. }
  11. type S3Uploader struct {
  12. bucket string
  13. secretKey string
  14. accessKey string
  15. }
  16. func NewS3Uploader(bucket, accessKey, secretKey string) *S3Uploader {
  17. return &S3Uploader{
  18. bucket: bucket,
  19. accessKey: accessKey,
  20. secretKey: secretKey,
  21. }
  22. }
  23. func (u *S3Uploader) Upload(path string) (string, error) {
  24. s3util.DefaultConfig.AccessKey = u.accessKey
  25. s3util.DefaultConfig.SecretKey = u.secretKey
  26. header := make(http.Header)
  27. header.Add("x-amz-acl", "public-read")
  28. header.Add("Content-Type", "image/png")
  29. fullUrl := u.bucket + util.GetRandomString(20) + ".png"
  30. writer, err := s3util.Create(fullUrl, header, nil)
  31. if err != nil {
  32. return "", err
  33. }
  34. defer writer.Close()
  35. imgData, err := ioutil.ReadFile(path)
  36. if err != nil {
  37. return "", err
  38. }
  39. _, err = writer.Write(imgData)
  40. if err != nil {
  41. return "", err
  42. }
  43. return fullUrl, nil
  44. }