Sling:查明资源是否是图像
Sling: Find out if resource is an image
我有一个完全设置的 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 中运行,并且到目前为止它应该做的事情,除了它将图像视为页面并且我想忽略图像文件。我需要做什么?
存储在 DAM 中的图像应该有 jcr:primaryType=dam:Asset。也就是说,您应该能够检查这些属性:
jcr:content
jcr:primaryType=cq:PageContent
cq:template=/apps/yourApp/yourTemplate
图像不会有 jcr:content/cq:template 属性,也不会有 jcr:content/jcr:primaryType 属性 cq:PageContent.
这些属性存在于 jcr:content 节点下。尝试点击两个示例 url——一个用于图像,一个用于常规页面——但将“.infinity.json”添加到 URL 的末尾。这将向您显示每个图像的属性,以便您可以找到有助于过滤图像的东西。
如果两者都有 jcr:primaryType=cq:Page,那么您可能需要重新考虑构建应用程序的方式。
图像应该从 DAM 加载,或者在任何地方,它应该有 jcr:primaryType= dam:Asset
这个 dam:Asset 节点将有一个 jcr:content 类型 = dam:AssetContent ,它将包含元数据节点,这个元数据节点将有一个 属性 类型的 dc:format,它将通知您有关文件类型的信息..
我知道这个问题有点老了,似乎 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())
}
我有一个完全设置的 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 中运行,并且到目前为止它应该做的事情,除了它将图像视为页面并且我想忽略图像文件。我需要做什么?
存储在 DAM 中的图像应该有 jcr:primaryType=dam:Asset。也就是说,您应该能够检查这些属性:
jcr:content
jcr:primaryType=cq:PageContent
cq:template=/apps/yourApp/yourTemplate
图像不会有 jcr:content/cq:template 属性,也不会有 jcr:content/jcr:primaryType 属性 cq:PageContent.
这些属性存在于 jcr:content 节点下。尝试点击两个示例 url——一个用于图像,一个用于常规页面——但将“.infinity.json”添加到 URL 的末尾。这将向您显示每个图像的属性,以便您可以找到有助于过滤图像的东西。
如果两者都有 jcr:primaryType=cq:Page,那么您可能需要重新考虑构建应用程序的方式。 图像应该从 DAM 加载,或者在任何地方,它应该有 jcr:primaryType= dam:Asset 这个 dam:Asset 节点将有一个 jcr:content 类型 = dam:AssetContent ,它将包含元数据节点,这个元数据节点将有一个 属性 类型的 dc:format,它将通知您有关文件类型的信息..
我知道这个问题有点老了,似乎 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())
}