Skip to main content

Can I add metadata to images?

Comments

17 comments

  • Yves Jaques

    Dear Itay,

    Are there any plans to allow users to view context metadata from the media library UI? This is actually a crucial use case for us and as a brand new user of the Advanced plan I'm really disappointed it doesn't support this, it's such an obvious use case to be able to easily view the custom key value pairs you need for your organizational purposes.

    0
  • Itay Taragano

    UPDATE

    Now custom metadata values can be displayed, added and removed via the interactive Media library too.

    0
  • Bharat Nanwani

    Hi Can you please help how do I update caption for already uploaded images in JAVA?

    0
  • Yves Jaques

    Hi Bharat, this is how I update metadata via a java rest service:

    First assuming you have already created a connection to your cloud account:

    private Map config = ObjectUtils.asMap(
            "cloud_name", "xxxxxxxx",
            "api_key", "xxxxxxxxxx",
            "api_secret", "xxxxxxxxxxxxxxxx");
    private Cloudinary cloudinary = new Cloudinary(config);
    private Api api = cloudinary.api();
    

    THEN SIMPLY DO SOMETHING LIKE THIS:

        ArrayList<String> params = new ArrayList<>();
    
        //tags should be comma-separated
        List tags = image.getTags();
        StringBuffer tagStr = new StringBuffer();
        for (int i = 0; i < tags.size(); i++) {
            tagStr.append(tags.get(i));
            if (i != tags.size() - 1) {
                tagStr.append(",");
            }
        }
        params.add("tags");
        params.add(tagStr.toString());
    
        //context should be pipe | separated
        Custom custom = image.getContext().getCustom();
    
        StringBuffer contextStr = new StringBuffer();
    
        contextStr.append("title=").append(custom.getTitle())
                .append("|caption=").append(custom.getCaption())
                .append("|location=").append(custom.getLocation())
                .append("|countryCode=").append(custom.getCountryCode())
                .append("|copyright=").append(custom.getCopyright())
                .append("|date=").append(custom.getDate())
                .append("|credit=").append(custom.getCredit())
                .append("|lat=").append(custom.getLat())
                .append("|lng=").append(custom.getLng())
                .append("|keywords=").append(custom.getKeywords())
                .append("|printQuality=").append(custom.getPrintQuality())
                .append("|theme=").append(custom.getTheme());
    
        params.add("context");
        params.add(contextStr.toString());
    
        try {
            return api.update(id, ObjectUtils.asMap(params.toArray()));
        } catch (Exception e) {
            logger.error(e.toString());
            return null;
        }
    }
    
    0
  • Daniel Meusburger

    Dear Cloudinary team,

    I did not find information in your documentation on how to actually access/retrieve meta data which I defined via the Media Library UI (e.g. a text description of a image or alt text). How can I access that information in Android / Java?

    0
  • Raphi Stein

    @Daniel

    Yes, I also had to tinker to figure it out.

    To get the metadata, simply add the property

    context: true

    to your request.

    i.e. in Postman, you would do

    https://api.cloudinary.com/v1_1//resources/image?context=true

    0
  • Maor Gariv

    Raphi is correct :)

    Java code example for future reference -

    api.resources(ObjectUtils.asMap("context", "true"));

    More details on our browsing capabilities -
    http://cloudinary.com/documentation/admin_api#browse_resources

    0
  • paul headington

    We are getting rate limit exceed when attempting to update ~2450 image in lots of 10 at a rate of 500 ms per update. Surely this is reasonable?

    If not please advise how we can achieve please?

    0
  • Nadav Ofir

    Hi paul,
    While the Admin-API is indeed rate limited, the same task can be achieved using the unlimited explicit() api.

    0
  • MitFun

    Hi,

    I'm using .NET integration in Xamarin.Forms with .NET Standard 2.0.

    I use cloudinary.UpdateResource to update context for meta data,

    but it will replace all exist meta data.

    Has any function can I use to add/update/delete a meta data by meta data key/pair?

    0
  • Aditi Madan

    Hi,

    Yes, you are correct. Currently, updateResource replaces the existing context with new ones.

    I have passed this request to our product team.

    You can use our list api to get the current context and then update it by appending existing with the new ones.

     

    0
  • MitFun

    Hi,

    Thank you for replay.

    Other question:

    I use cloudinary.Upload new image and assign exist PublicID to replace image,

    but it will clear all exist meta data...

    Has any function can I use to replace image without touch exist meta data?

    0
  • Aditi Madan

    Hi,

    Upload image uploads a new image, it does not update an existing one.

    If you want to update the image without changing the context, you can use the update api which will update your resource without changing the context unless you specifically specify the context for updating. 

    0
  • MitFun

    Hi,

    Sorry for ask old question.

    In .NET integration what api can use to update the image without changing the context?

    Have some sample code?

    Thank you.

    0
  • Aditi Madan

    Hi,

     

    Currently, we don't have a way to update the resource without changing the context.

    You can use the Admin API to list your resources(save the current context) and then update the resource(with the previously saved context)

    Here's our .NET code for a reference.
    https://github.com/cloudinary/CloudinaryDotNet/blob/e33d2a6b8fd2980cdd65a7c8b6292f0fdb4910de/Cloudinary/Cloudinary.cs#L388

     

    0
  • Outdoors Project

    Hi,

    I'm trying to update caption for an existing photo, but I receive the message: 'Resource not found". 

     
    cloudinary.v2.api.update(req.params.publicId, options, function (err, result) {
            if (err) console.log(err);
            else {
                res.status(200).send("photo updated");
            }
      })
     
    Is update the right function to use? How can I update the metadata of a photo with nodejs?
     
    Thank you
     
    //Edit: this is how i did it in node.js
     
    var options = {
            context: "caption=" + req.body.data
    req.params.publicId = req.params.publicId.replace(',', '/').split('.')[0];
     
    cloudinary.v2.api.update(req.params.publicId, options, function (err, result) {
            if (err) console.log(err);
            else {
                res.status(200).send("photo updated");
            }
        })
     
     
     
    1
  • Shirly Manor

    Here is a code sample to add a caption to your already uploded image:

     

    cloudinary.v2.api.update("sample", 
    { type: "upload", context: {caption: "test2"} }, 
    function(error, result) {console.log(result); } );

    0

Please sign in to leave a comment.