@@ -273,35 +273,48 @@ public Map callApi(String action, Map<String, Object> params, Map options, Objec
273273 return result ;
274274 }
275275
276+ public String prepareUploadTagParams (Map options ) {
277+ if (options == null ) options = new HashMap ();
278+ if (options .get ("resource_type" ) == null ) {
279+ options = new HashMap (options );
280+ options .put ("resource_type" , "auto" );
281+ }
282+
283+ String callback = Cloudinary .asString (options .get ("callback" ), this .cloudinary .getStringConfig ("callback" ));
284+ if (callback == null ) {
285+ throw new IllegalArgumentException ("Must supply callback" );
286+ }
287+ options .put ("callback" , callback );
288+
289+ Map <String , Object > params = this .buildUploadParams (options );
290+ signRequestParams (params , options );
291+
292+ // Remove blank parameters
293+ for (Iterator <Object > iterator = params .values ().iterator (); iterator .hasNext (); ) {
294+ String value = (String ) iterator .next ();
295+ if (StringUtils .isBlank (value )) {
296+ iterator .remove ();
297+ }
298+ }
299+
300+ return JSONObject .toJSONString (params );
301+ }
302+
303+ public String getUploadUrl (Map options ) {
304+ if (options == null ) options = new HashMap ();
305+ return this .cloudinary .cloudinaryApiUrl ("upload" , options );
306+ }
307+
276308 public String imageUploadTag (String field , Map options , Map <String , Object > htmlOptions ) {
277309 if (htmlOptions == null ) htmlOptions = Cloudinary .emptyMap ();
278- if (options == null ) options = new HashMap ();
279- if (options .get ("resource_type" ) == null ) {
280- options = new HashMap (options );
281- options .put ("resource_type" , "auto" );
282- }
283- String cloudinaryUploadUrl = this .cloudinary .cloudinaryApiUrl ("upload" , options );
284310
285- String callback = Cloudinary .asString (options .get ("callback" ), this .cloudinary .getStringConfig ("callback" ));
286- if (callback == null ) {
287- throw new IllegalArgumentException ("Must supply callback" );
288- }
289- options .put ("callback" , callback );
290-
291- Map <String , Object > params = this .buildUploadParams (options );
292- signRequestParams (params , options );
293-
294- // Remove blank parameters
295- for (Iterator <Object > iterator = params .values ().iterator (); iterator .hasNext (); ) {
296- String value = (String ) iterator .next ();
297- if (StringUtils .isBlank (value )) {
298- iterator .remove ();
299- }
300- }
311+ String tagParams = StringEscapeUtils .escapeHtml (prepareUploadTagParams (options ));
312+
313+ String cloudinaryUploadUrl = getUploadUrl (options );
301314
302315 StringBuilder builder = new StringBuilder ();
303316 builder .append ("<input type='file' name='file' data-url='" ).append (cloudinaryUploadUrl ).
304- append ("' data-form-data='" ).append (StringEscapeUtils . escapeHtml ( JSONObject . toJSONString ( params )) ).
317+ append ("' data-form-data='" ).append (tagParams ).
305318 append ("' data-cloudinary-field='" ).append (field ).
306319 append ("' class='cloudinary-fileupload" );
307320 if (htmlOptions .containsKey ("class" )) {
0 commit comments