33import java .io .UnsupportedEncodingException ;
44import java .net .URI ;
55import java .net .URLDecoder ;
6+ import java .net .URLEncoder ;
67import java .security .MessageDigest ;
78import java .security .NoSuchAlgorithmException ;
89import java .security .SecureRandom ;
@@ -190,12 +191,7 @@ public String privateDownload(String publicId, String format, Map<String, Object
190191 params .put ("type" , options .get ("type" ));
191192 params .put ("timestamp" , new Long (System .currentTimeMillis () / 1000L ).toString ());
192193 signRequest (params , options );
193- AbstractUrlBuilderStrategy builder = urlBuilderStrategy .init (cloudinaryApiUrl ("download" , options ));
194-
195- for (Map .Entry <String , Object > param : params .entrySet ()) {
196- builder .addParam (param .getKey (), param .getValue ().toString ());
197- }
198- return builder .url ();
194+ return buildUrl (cloudinaryApiUrl ("download" , options ), params );
199195 }
200196
201197 public String zipDownload (String tag , Map <String , Object > options ) throws Exception {
@@ -211,11 +207,23 @@ public String zipDownload(String tag, Map<String, Object> options) throws Except
211207 }
212208 params .put ("transformation" , transformation );
213209 signRequest (params , options );
214- AbstractUrlBuilderStrategy builder = urlBuilderStrategy .init (cloudinaryApiUrl ("download_tag.zip" , options ));
210+ return buildUrl (cloudinaryApiUrl ("download_tag.zip" , options ), params );
211+ }
212+
213+ private String buildUrl (String base , Map <String , Object > params ) throws UnsupportedEncodingException {
214+ StringBuilder urlBuilder = new StringBuilder ();
215+ urlBuilder .append (base );
216+ if (!params .isEmpty ()) {
217+ urlBuilder .append ("?" );
218+ }
219+ boolean first = true ;
215220 for (Map .Entry <String , Object > param : params .entrySet ()) {
216- builder .addParam (param .getKey (), param .getValue ().toString ());
221+ if (!first ) urlBuilder .append ("&" );
222+ urlBuilder .append (param .getKey ()).append ("=" ).append (
223+ URLEncoder .encode (param .getValue ().toString (), "UTF-8" ));
224+ first = false ;
217225 }
218- return builder . url ();
226+ return urlBuilder . toString ();
219227 }
220228
221229 protected Map parseConfigUrl (String cloudinaryUrl ) {
0 commit comments