Expand my Community achievements bar.

SOLVED

InputStream object to read from DAM Asset

Avatar

Level 2

Hi,

I want to fetch DAM asset from JCR and obtain inputstream for a node or for an asset so that I can read that asset. I have implemented below code.

querybuilder = resource.getResourceResolver().adaptTo(QueryBuilder.class);
Query query = querybuilder.createQuery(PredicateGroup.create(map), session);
SearchResult result = query.getResult();

for (Hit ht : result.getHits()) {            

            try {
                path = hit.getPath();
            } catch (RepositoryException e) {
                e.printStackTrace();
            }
            Resource assetResource = resourceResolver.getResource(path);
            Asset asset = assetResource.adaptTo(Asset.class);

}

I am able to fetch Asset object but I am not able to get InputStream out of that. 

I dont want to use deprecated method as follows jcrContent.getProperty("jcr:data").getStream(); 

Can anyone please guide me how I can obtain InputStream object for an Asset?  Or please share some code snippet for fetching image(DAM Asset) from JCR and reading the same using inputstream.

 

Thanks,

Manju

1 Accepted Solution

Avatar

Correct answer by
Employee

Hi Manju,

Try this:

querybuilder = resource.getResourceResolver().adaptTo(QueryBuilder.class); Query query = querybuilder.createQuery(PredicateGroup.create(map), session); SearchResult result = query.getResult(); for (Hit ht : result.getHits()) { try { Resource assetResource = hit.getResource(); Asset asset = assetResource.adaptTo(Asset.class); // you probably need a null check here... Rendition original = asset.getOriginal(); if (original != null) { // it is rare, but some assets might not have an original rendition InputStream stream = original.getStream(); // do something with the stream } } catch (Exception e) { e.printStackTrace(); } }

An Asset doesn't have an InputStream per se. You need to use one of the renditions.

HTH,

Justin

View solution in original post

1 Reply

Avatar

Correct answer by
Employee

Hi Manju,

Try this:

querybuilder = resource.getResourceResolver().adaptTo(QueryBuilder.class); Query query = querybuilder.createQuery(PredicateGroup.create(map), session); SearchResult result = query.getResult(); for (Hit ht : result.getHits()) { try { Resource assetResource = hit.getResource(); Asset asset = assetResource.adaptTo(Asset.class); // you probably need a null check here... Rendition original = asset.getOriginal(); if (original != null) { // it is rare, but some assets might not have an original rendition InputStream stream = original.getStream(); // do something with the stream } } catch (Exception e) { e.printStackTrace(); } }

An Asset doesn't have an InputStream per se. You need to use one of the renditions.

HTH,

Justin