【问题标题】:How to find unused images from CQ DAM如何从 CQ DAM 中查找未使用的图像
【发布时间】:2016-02-03 21:02:35
【问题描述】:

有没有办法从 CQ DAM 中找到未使用的资产?目前我们的 CQ 实例已经积累了大量的资产,目前至少有 25% 的资产没有被使用。我们的 CQ 实例在 windows (5.6) 上运行。有没有更清洁的方法来做同样的事情?

谢谢, 桑托什

【问题讨论】:

    标签: aem


    【解决方案1】:

    您可以使用以下 XPATH 查询来获取所有资产:

    /jcr:root/content/dam//*[@jcr:primaryType='dam:Asset']
    

    使用 QueryManger 可以获得资产节点列表:

    Workspace workspace = session.getWorkspace();
    QueryManager qm = workspace.getQueryManager();
    Query query = qm.createQuery(xpathQuery, Query.XPATH);
    QueryResult queryResult = query.execute();
    result = queryResult.getNodes();
    

    接下来您需要获取每个资产的路径并验证它是否被使用:

    while(result.hasNext()) {
        Node assetNode = result.nextNode();
        String assetPath = assetNode.getPath();
    }
    

    要验证是否使用了资产,您需要再次运行 xpath :

    /jcr:root/content/mywebsite//*[@fileReference='putAssetPathHere']
    

    现在result.hasNext() == true 表示已使用资产

    【讨论】:

    • 抱歉回复延迟。查询“/jcr:root/content/dam//*[@fileReference='putAssetPathHere']”总是返回错误。替换正确的资产路径后。
    • @kallada 抱歉,我插入了错误的路径,您需要使用您的必要密码 wesite /jcr:root/content/mywebsite//*[@fileReference='putAssetPathHere'],或者您可以仅使用 /jcr:root//*[@fileReference='putAssetPathHere'],但它将是长时间运行的查询
    【解决方案2】:

    另一种解决方案是使用ReferenceSearch

    for (String path : paths) {
        if (resourceResolver.getResource(path) != null) {
            Map<String, ReferenceSearch.Info> searchResult = referenceSearch.search(resourceResolver, path);
    
            if (searchResult.isEmpty()) {
                //path is unused asset
            }
    
            //get used pages
            for (Map.Entry<String, ReferenceSearch.Info> info : searchResult.entrySet()) {
                info.getKey();//will return page path
            }
    
            //get used properties paths
            for (Map.Entry<String, ReferenceSearch.Info> info : searchResult.entrySet()) {
                for (String prop : info.getValue().getProperties()) {
                    //prop is property path
                }
            }
        }
    }
    

    【讨论】:

      【解决方案3】:

      对我来说,以下代码有效。 帮助链接:http://wemcode.wemblog.com/get_asset_reference_in_page

      String damPath = "/content/dam/geometrixx/offices/basel kitchen.jpg";
      
         for (ReferenceSearch.Info info: new ReferenceSearch().search(resourceResolver, damPath).values()) {
      
        for (String p: info.getProperties()) {
      
                 out.println("Path is "+info.getPage().getPath());
      
             }
      

      【讨论】:

      • 虽然此代码 sn-p 可能是解决方案,但 including an explanation 确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      猜你喜欢
      • 1970-01-01
      • 2016-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多