| package utils |
|
|
| import ( |
| "context" |
| "fmt" |
| "mime/multipart" |
| "os" |
|
|
| "github.com/cloudinary/cloudinary-go/v2" |
| "github.com/cloudinary/cloudinary-go/v2/api" |
| "github.com/cloudinary/cloudinary-go/v2/api/uploader" |
| ) |
|
|
| type CloudinaryClient struct { |
| cld *cloudinary.Cloudinary |
| } |
|
|
| func NewCloudinaryClient() (*CloudinaryClient, error) { |
| cloudName := os.Getenv("CLOUDINARY_CLOUD_NAME") |
| apiKey := os.Getenv("CLOUDINARY_API_KEY") |
| apiSecret := os.Getenv("CLOUDINARY_API_SECRET") |
|
|
| cld, err := cloudinary.NewFromParams(cloudName, apiKey, apiSecret) |
| if err != nil { |
| return nil, err |
| } |
|
|
| return &CloudinaryClient{cld: cld}, nil |
| } |
|
|
| func (c *CloudinaryClient) UploadImage(file multipart.File, reportID string, longitude, latitude float64, description string) (string, error) { |
| ctx := context.Background() |
|
|
| contextData := api.CldAPIMap{ |
| "Id": reportID, |
| "description": description, |
| "latitude": fmt.Sprintf("%.6f", latitude), |
| "longitude": fmt.Sprintf("%.6f", longitude), |
| } |
|
|
| uploadParams := uploader.UploadParams{ |
| PublicID: reportID, |
| Folder: "reports", |
| Context: contextData, |
| } |
|
|
| result, err := c.cld.Upload.Upload(ctx, file, uploadParams) |
| if err != nil { |
| return "", err |
| } |
|
|
| return result.SecureURL, nil |
| } |
|
|