【问题标题】:Sling: Find out if resource is an imageSling:找出资源是否是图像
【发布时间】:2015-09-16 15:24:27
【问题描述】:

我有一个完整设置的 CQ5/AEM 应用程序,应该生成一个 sitemap.xml。到目前为止,一切顺利。

我有一个所有页面的列表,但其中一些页面实际上是图像。我的问题:如何确定页面是否实际上是图像?两者都有 jcr:primaryType=cq:Page

public void getMoreChildren(HttpServletRequest request, JspWriter out, Page incomingChildPage) {
        Iterator<Page> childPageChildren = incomingChildPage.listChildren();
        while (childPageChildren.hasNext()) {
            Page childPage = childPageChildren.next();
            String pagePath = childPage.getPath();
            SlingHttpServletRequest slingRequest = (SlingHttpServletRequest)request;

            ResourceResolver resourceResolver = slingRequest.getResourceResolver();
            Externalizer externalizer = resourceResolver.adaptTo(Externalizer.class);

            String externalUrl = externalizer.publishLink(resourceResolver,pagePath) + ".html";
            //do things with data so far
            getMoreChildren(request, out, childPage);
        }
}

所有这一切都在 JSP 中运行,并完成了迄今为止应该做的事情,除了它将图像视为页面并且我想忽略图像文件。我需要做什么?

【问题讨论】:

    标签: jsp aem sling


    【解决方案1】:

    我知道这个问题有点老了,似乎 AEM 中的某些东西已经改变了。

    我一直在寻找如何确定 DAM 中的资产是否也是图像,而无需创建自己的实用程序来检查 mime 类型。我最终找到了一种内置的方法来做到这一点。有一个实用程序名称DamUtil,上面有各种有用的东西。回答OP问题所需的方法是isImage()

    Resource resource = resourceResolver.resolve("/content/dam/we-retail/en/people/womens/women_2.jpg");
    Asset asset = resource.adaptTo(Asset.class);
    
    if(com.day.cq.dam.commons.util.DamUtil.isImage(asset)) {
        Log.debug("Found and image at: {}", asset.getPath())
    }
    

    【讨论】:

      【解决方案2】:

      存储在 DAM 中的图像应具有 jcr:primaryType=dam:Asset。也就是说,您应该能够检查这些属性:

      jcr:content
          jcr:primaryType=cq:PageContent
          cq:template=/apps/yourApp/yourTemplate
      

      图像没有 jcr:content/cq:template 属性,也没有等于 cq:PageContent 的 jcr:content/jcr:primaryType 属性。

      这些属性存在于 jcr:content 节点下。尝试点击两个示例 url——一个用于图像,一个用于常规页面——但在 URL 的末尾添加“.infinity.json”。这将向您显示每个属性的属性,以便您找到可以帮助您过滤掉图像的内容。

      【讨论】:

      • 这让我走上了正确的道路。我们至少为不同类型的内容提供了不同的“sling:resourceType”属性,我在 json 中看到了这一点。
      【解决方案3】:

      如果两者都有 jcr:primaryType=cq:Page,那么您可能需要重新考虑构建应用程序的方式。 图像应该从 DAM 加载,或者在任何地方,它都应该有 jcr:primaryType= dam:Asset 并且这个 dam:Asset 节点将有一个 jcr:content type= dam:AssetContent ,它将包含元数据节点,这个元数据节点将有一个 dc:format 属性,它将通知您文件类型..

      【讨论】:

      • 我没有设计应用程序,也没有维护内容。我可以保证图像不会“jcr:primaryType= dam:Asset”,因为那不会让我的生活变得轻松
      猜你喜欢
      • 1970-01-01
      • 2021-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      相关资源
      最近更新 更多