You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AEM中如何在Java/JSP获取指定Rendition的DAM资产路径

嘿,我来帮你搞定这个问题!在AEM里获取DAM资产指定rendition的路径其实有几种常用的方法,分Java后端和JSP页面两种场景给你拆解:

在Java类中获取指定Rendition路径

首先你需要拿到目标Asset对象,通常可以通过ResourceResolver来获取,然后直接根据rendition名称提取路径。这里给你一段实用的代码示例:

import com.day.cq.dam.api.Asset;
import com.day.cq.dam.api.Rendition;
import org.apache.sling.api.resource.ResourceResolver;

// 假设你已经持有有效的resourceResolver实例,以及目标资产的完整路径
String targetAssetPath = "/content/dam/my-site/banners/home-banner.jpg";
Asset asset = resourceResolver.getResource(targetAssetPath).adaptTo(Asset.class);

if (asset != null) {
    // 传入你需要的rendition名称:cq5dam.thumbnail.140.100.png
    Rendition thumbnailRendition = asset.getRendition("cq5dam.thumbnail.140.100.png");
    if (thumbnailRendition != null) {
        // 获取rendition的存储路径
        String renditionPath = thumbnailRendition.getPath();
        // 或者获取前端可直接访问的URI路径
        String accessibleUri = thumbnailRendition.getURI();
        
        // 后续就可以把这个路径传递给前端渲染了
    }
}

⚠️ 注意事项:

  • 确保你的ResourceResolver拥有访问目标DAM资产的权限,否则会获取不到Asset对象
  • 一定要做null判断!如果指定的rendition不存在(比如资产还没生成这个缩略图),直接调用方法会抛出空指针异常
在JSP页面中获取指定Rendition路径

JSP里有两种常用方式,一种是用AEM提供的标签库,另一种是直接嵌入Java代码,看你习惯哪种:

方法一:使用CQ标签库(推荐,更符合JSP写法规范)

首先要在JSP顶部引入CQ标签库:

<%@ taglib prefix="cq" uri="http://www.day.com/taglibs/cq/1.0" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

然后通过标签获取资产和对应rendition:

<%-- 传入目标资产的路径 --%>
<cq:asset path="/content/dam/my-site/banners/home-banner.jpg" var="targetAsset" />
<c:if test="${not empty targetAsset}">
    <%-- 指定你需要的rendition名称 --%>
    <cq:rendition asset="${targetAsset}" name="cq5dam.thumbnail.140.100.png" var="thumbnail" />
    <c:if test="${not empty thumbnail}">
        <%-- 直接用路径渲染图片 --%>
        <img src="${thumbnail.path}" alt="Home Banner Thumbnail" />
    </c:if>
</cq:asset>

方法二:直接嵌入Java代码(适合简单场景)

如果不想用标签库,也可以直接在JSP里写Java逻辑,和后端类的逻辑类似:

<%
String assetPath = "/content/dam/my-site/banners/home-banner.jpg";
com.day.cq.dam.api.Asset asset = sling.getResourceResolver().getResource(assetPath).adaptTo(com.day.cq.dam.api.Asset.class);
if (asset != null) {
    com.day.cq.dam.api.Rendition thumbnail = asset.getRendition("cq5dam.thumbnail.140.100.png");
    if (thumbnail != null) {
%>
        <img src="<%= thumbnail.getPath() %>" alt="Home Banner Thumbnail" />
<%
    }
}
%>

💡 小提示:rendition的名称是大小写敏感的,一定要和AEM DAM里生成的缩略图名称完全匹配哦!

内容的提问来源于stack exchange,提问作者ShAkKiR

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 03:59:18