|
| 1 | +package external |
| 2 | + |
| 3 | +import ( |
| 4 | + "image" |
| 5 | + "image/png" |
| 6 | + "os" |
| 7 | + "strings" |
| 8 | + |
| 9 | + "github.com/aws/aws-sdk-go/aws" |
| 10 | + "github.com/aws/aws-sdk-go/aws/endpoints" |
| 11 | + "github.com/aws/aws-sdk-go/aws/session" |
| 12 | + "github.com/aws/aws-sdk-go/service/s3/s3manager" |
| 13 | + "github.com/pkg/errors" |
| 14 | +) |
| 15 | + |
| 16 | +// GetS3Uploader set s3 config. |
| 17 | +func GetS3Uploader() *s3manager.Uploader { |
| 18 | + conf := &aws.Config{ |
| 19 | + Region: aws.String(endpoints.ApNortheast1RegionID), |
| 20 | + } |
| 21 | + sess := session.New(conf) |
| 22 | + svc := s3manager.NewUploader(sess) |
| 23 | + return svc |
| 24 | +} |
| 25 | + |
| 26 | +// UploadImg upload image to s3. |
| 27 | +func (r *Repository) UploadImg(img image.Image, Name string) (string, error) { |
| 28 | + fileName := strings.Split(Name, "/")[1] |
| 29 | + filePath := fileName + ".png" |
| 30 | + file, err := os.Create(filePath) |
| 31 | + if err != nil { |
| 32 | + return "", errors.Wrap(err, "failed to create file") |
| 33 | + } |
| 34 | + defer file.Close() |
| 35 | + |
| 36 | + err = png.Encode(file, img) |
| 37 | + if err != nil { |
| 38 | + return "", errors.Wrap(err, "failed to encode to file") |
| 39 | + } |
| 40 | + file, err = os.Open(filePath) |
| 41 | + if err != nil { |
| 42 | + return "", errors.Wrap(err, "failed to open file") |
| 43 | + } |
| 44 | + |
| 45 | + svc := GetS3Uploader() |
| 46 | + result, err := svc.Upload(&s3manager.UploadInput{ |
| 47 | + Bucket: aws.String("github-link-card"), |
| 48 | + Key: aws.String(Name + ".png"), |
| 49 | + Body: file, |
| 50 | + }) |
| 51 | + if err != nil { |
| 52 | + return "", errors.Wrap(err, "failed to upload file") |
| 53 | + } |
| 54 | + err = os.Remove(fileName + ".png") |
| 55 | + if err != nil { |
| 56 | + return "", errors.Wrap(err, "failed to delete file") |
| 57 | + } |
| 58 | + return result.Location, nil |
| 59 | +} |
0 commit comments