s3uploader.go 977 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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 S3Uploader struct {
  9. bucket string
  10. secretKey string
  11. accessKey string
  12. }
  13. func NewS3Uploader(bucket, accessKey, secretKey string) *S3Uploader {
  14. return &S3Uploader{
  15. bucket: bucket,
  16. accessKey: accessKey,
  17. secretKey: secretKey,
  18. }
  19. }
  20. func (u *S3Uploader) Upload(path string) (string, error) {
  21. s3util.DefaultConfig.AccessKey = u.accessKey
  22. s3util.DefaultConfig.SecretKey = u.secretKey
  23. header := make(http.Header)
  24. header.Add("x-amz-acl", "public-read")
  25. header.Add("Content-Type", "image/png")
  26. fullUrl := u.bucket + util.GetRandomString(20) + ".png"
  27. writer, err := s3util.Create(fullUrl, header, nil)
  28. if err != nil {
  29. return "", err
  30. }
  31. defer writer.Close()
  32. imgData, err := ioutil.ReadFile(path)
  33. if err != nil {
  34. return "", err
  35. }
  36. _, err = writer.Write(imgData)
  37. if err != nil {
  38. return "", err
  39. }
  40. return fullUrl, nil
  41. }