SiLaju / utils /cloudinary_util.go
RyZ
feature: API Report and Get User
d236183
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
}