首页 > 解决方案 > 如何获取 AEM DAM 中存在的所有资产列表

问题描述

我们有资产 api 来获取列表,但为此我们需要提供 AEM 用户凭据。

我们是否有任何接口,可以从大坝中获取所有资产列表,就像使用页面管理器获取所有页面一样。

标签: aem-6

解决方案


为此,您可以结合使用 JCR 的 QueryManager API 和您的特定查询。下面是一个示例 servlet,它列出了路径下的所有资产 - /content/dam/we-retail/en/features


import javax.jcr.Session;
import javax.jcr.query.Query;
import javax.jcr.query.QueryManager;
import javax.jcr.query.QueryResult;
import javax.jcr.query.Row;
import javax.jcr.query.RowIterator;
import javax.servlet.Servlet;

import org.apache.sling.api.SlingHttpServletRequest;
import org.apache.sling.api.SlingHttpServletResponse;
import org.apache.sling.api.resource.ResourceResolver;
import org.apache.sling.api.servlets.HttpConstants;
import org.apache.sling.api.servlets.SlingSafeMethodsServlet;
import org.osgi.service.component.annotations.Component;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Component(immediate = true, service = Servlet.class, property = { "sling.servlet.methods=" + HttpConstants.METHOD_GET,
        "sling.servlet.paths=" + "/bin/learning/assetlister" })
public class AssetListerServlet extends SlingSafeMethodsServlet {

    // Generated serialVersionUID
    private static final long serialVersionUID = 7762806638577908286L;

    // Default logger
    private final Logger log = LoggerFactory.getLogger(this.getClass());

    // Instance of ResourceResolver
    private ResourceResolver resourceResolver;

    // JCR Session instance
    private Session session;

    @Override
    protected void doGet(SlingHttpServletRequest request, SlingHttpServletResponse response) {

        try {

            // Getting the ResourceResolver from the current request
            resourceResolver = request.getResourceResolver();

            // Getting the session instance by adapting ResourceResolver
            session = resourceResolver.adaptTo(Session.class);

            QueryManager queryManager = session.getWorkspace().getQueryManager();
            String queryString = "SELECT * FROM [dam:Asset] AS asset WHERE ISDESCENDANTNODE(asset ,'/content/dam/we-retail/en/features')";
            Query query = queryManager.createQuery(queryString, "JCR-SQL2");

            QueryResult queryResult = query.execute();

            response.getWriter().println("--------------Result-------------");

            RowIterator rowIterator = queryResult.getRows();

            while (rowIterator.hasNext()) {
                Row row = rowIterator.nextRow();
                response.getWriter().println(row.toString());
            }

        } catch (Exception e) {
            log.error(e.getMessage(), e);
        } finally {
            if (resourceResolver != null) {
                resourceResolver.close();
            }
        }
    }

}

类似地使用您的特定要求,您可以在组件、服务等中使用此逻辑。我希望这会有所帮助。


推荐阅读