Tesis 1.0.0
Loading...
Searching...
No Matches
CloudinaryManager.java
Go to the documentation of this file.
1package com.example.food_front.utils;
2
3import android.content.Context;
4import android.util.Log;
5
6import com.cloudinary.android.MediaManager;
7import com.cloudinary.android.callback.ErrorInfo;
8import com.cloudinary.android.callback.UploadCallback;
9
10import java.util.HashMap;
11import java.util.Map;
12
16public class CloudinaryManager {
17 private static final String TAG = "CloudinaryManager";
18 private static boolean isInitialized = false;
19
20 // Configuración de Cloudinary
21 private static final String CLOUD_NAME = "djp80kwaj";
22 private static final String API_KEY = "285359299675698";
23 private static final String API_SECRET = "CILwUfSuiDsJ977SrrCvPQcgJz";
24
30 public static boolean initialize(Context context) {
31 if (isInitialized) {
32 return true;
33 }
34
35 try {
36 // Configurar Cloudinary para subida sin firma
37 Map<String, String> config = new HashMap<>();
38 config.put("cloud_name", CLOUD_NAME);
39 // Para subidas sin firma, solo necesitamos el cloud_name
40 config.put("secure", "true");
41
42 try {
43 // Intentar obtener la instancia actual (verificará si ya está inicializado)
44 MediaManager.get();
45 // Si llegamos aquí, ya está inicializado
46 Log.d(TAG, "MediaManager ya estaba inicializado");
47 isInitialized = true;
48 } catch (IllegalStateException e) {
49 // No está inicializado, así que lo inicializamos
50 MediaManager.init(context, config);
51 Log.d(TAG, "MediaManager inicializado correctamente para subidas sin firma");
52 isInitialized = true;
53 }
54
55 return true;
56 } catch (Exception e) {
57 Log.e(TAG, "Error al inicializar Cloudinary: " + e.getMessage(), e);
58 return false;
59 }
60 }
61
69 public static void uploadImage(Context context, byte[] imageBytes, String folderName, final CloudinaryUploadCallback callback) {
70 if (!initialize(context)) {
71 callback.onError("No se pudo inicializar Cloudinary");
72 return;
73 }
74
75 try {
76 // Creamos una copia de los bytes para evitar modificaciones concurrentes
77 final byte[] imageBytesToUpload = imageBytes.clone();
78
79 // Timestamp único para el nombre del archivo
80 String timestamp = String.valueOf(System.currentTimeMillis());
81
82 // Usamos un nombre de archivo más seguro, sin espacios ni caracteres especiales
83 String uniqueFileName = "user_" + timestamp;
84
85 // Realizamos la subida - Simplificamos las opciones para reducir problemas de firma
86 String requestId = MediaManager.get().upload(imageBytesToUpload)
87 .option("folder", "profile_images")
88 .option("public_id", uniqueFileName)
89 .unsigned("ml_default") // Usar un preset de subida sin firma para evitar problemas de autenticación
90 .callback(new UploadCallback() {
91 @Override
92 public void onStart(String requestId) {
93 Log.d(TAG, "Comenzando subida a Cloudinary...");
94 callback.onStart();
95 }
96
97 @Override
98 public void onProgress(String requestId, long bytes, long totalBytes) {
99 double progress = (double) bytes / totalBytes;
100 callback.onProgress(progress);
101 }
102
103 @Override
104 public void onSuccess(String requestId, Map resultData) {
105 String url = (String) resultData.get("url");
106 String secureUrl = (String) resultData.get("secure_url");
107 // Preferimos la URL segura
108 String finalUrl = secureUrl != null ? secureUrl : url;
109
110 Log.d(TAG, "Subida exitosa a Cloudinary. URL: " + finalUrl);
111 callback.onSuccess(finalUrl);
112 }
113
114 @Override
115 public void onError(String requestId, ErrorInfo error) {
116 Log.e(TAG, "Error en subida a Cloudinary: " + error.getDescription());
117 callback.onError(error.getDescription());
118 }
119
120 @Override
121 public void onReschedule(String requestId, ErrorInfo error) {
122 Log.d(TAG, "Reprogramando subida a Cloudinary: " + error.getDescription());
123 }
124 })
125 .dispatch();
126
127 } catch (Exception e) {
128 Log.e(TAG, "Error al subir imagen a Cloudinary: " + e.getMessage());
129 callback.onError("Error: " + e.getMessage());
130 }
131 }
132
136 public interface CloudinaryUploadCallback {
137 void onStart();
138 void onProgress(double progress);
139 void onSuccess(String imageUrl);
140 void onError(String errorMessage);
141 }
142}
static void uploadImage(Context context, byte[] imageBytes, String folderName, final CloudinaryUploadCallback callback)