Liferay 7.4 GA27+中DLURLHelperUtil.getPreviewURL返回旧URL格式求助
Liferay 7.4 GA27+ 文档与媒体URL格式适配问题解决方法
问题背景
在Liferay 7.4 GA27及以上版本中,文档与媒体的图片URL格式已变更:
- 旧格式:
[server-address]/documents/[site-id]/[folder-id]/[file-name]/[UUID] - 新格式:
[server-address]/documents/d/[site's friendly url]/[file-friendly-URL]
使用DLURLHelperUtil.getPreviewURL()方法获取URL时,仍返回旧格式,需通过以下步骤适配新格式。
一、使用官方推荐的新API
Liferay 7.4 GA27+ 提供了专门生成友好URL的API,优先使用以下方式替代旧工具类:
1. 用DLFriendlyURLProvider生成新格式URL
该API直接生成符合要求的友好URL路径,示例代码:
import com.liferay.document.library.kernel.service.DLFriendlyURLProvider; import com.liferay.portal.kernel.exception.PortalException; import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.service.GroupLocalServiceUtil; import com.liferay.document.library.kernel.model.DLFileEntry; import com.liferay.portal.kernel.util.PortalUtil; import javax.servlet.http.HttpServletRequest; // 推荐通过依赖注入获取DLFriendlyURLProvider实例 DLFriendlyURLProvider dlFriendlyURLProvider = ...; HttpServletRequest request = ...; DLFileEntry dlFileEntry = ...; // 目标文件对象 try { Group siteGroup = GroupLocalServiceUtil.getGroup(dlFileEntry.getGroupId()); // 获取相对路径的友好URL String friendlyURL = dlFriendlyURLProvider.getFriendlyURL(dlFileEntry, siteGroup); // 拼接服务器地址得到完整URL String fullURL = PortalUtil.getPortalURL(request) + friendlyURL; } catch (PortalException e) { e.printStackTrace(); }
2. 替代getPreviewURL的新方法
如果需要预览URL功能,使用DLAppHelperLocalService的适配方法:
import com.liferay.document.library.kernel.service.DLAppHelperLocalServiceUtil; import com.liferay.portal.kernel.model.DLFileEntry; import com.liferay.portal.kernel.theme.ThemeDisplay; import com.liferay.portal.kernel.exception.PortalException; DLFileEntry dlFileEntry = ...; ThemeDisplay themeDisplay = ...; // 从request中获取ThemeDisplay try { String previewURL = DLAppHelperLocalServiceUtil.getFileEntryPreviewURL( dlFileEntry, dlFileEntry.getFileVersion(), themeDisplay, "" ); } catch (PortalException e) { e.printStackTrace(); }
二、检查系统配置
确保Liferay已开启友好URL支持:
- 进入控制面板 → 配置 → 系统设置 → 文档与媒体,找到「Friendly URL」配置项,启用“生成友好URL”
- 确认站点友好URL配置正确(站点设置 → 友好URL),新格式依赖该值
三、手动构造新格式URL(备选方案)
若无法使用官方API,可手动拼接URL,步骤如下:
- 获取服务器地址:通过
PortalUtil.getPortalURL(request)获取 - 提取站点友好URL:从
Group对象的getFriendlyURL()方法获取,去除开头的/ - 提取文件友好URL:从
DLFileEntry对象的getFriendlyURL()方法获取 - 拼接成最终URL:
[server-address]/documents/d/[site-friendly-url]/[file-friendly-url]
示例代码:
import com.liferay.portal.kernel.model.Group; import com.liferay.portal.kernel.service.GroupLocalServiceUtil; import com.liferay.document.library.kernel.model.DLFileEntry; import com.liferay.portal.kernel.util.PortalUtil; import javax.servlet.http.HttpServletRequest; HttpServletRequest request = ...; DLFileEntry dlFileEntry = ...; Group siteGroup = GroupLocalServiceUtil.getGroup(dlFileEntry.getGroupId()); String siteFriendlyURL = siteGroup.getFriendlyURL().replaceFirst("^/", ""); String fileFriendlyURL = dlFileEntry.getFriendlyURL(); String fullNewURL = PortalUtil.getPortalURL(request) + "/documents/d/" + siteFriendlyURL + "/" + fileFriendlyURL;
注意事项
- 旧文件需触发友好URL生成:新上传文件自动生成友好URL,旧文件可通过重新保存或批量工具生成
- 优先使用官方API:避免硬编码格式,防止后续版本变更失效
- 权限控制:生成的URL仍受Liferay权限体系管控,无需额外处理
内容的提问来源于stack exchange,提问作者Sumair Ahmed
相关产品推荐
相关产品推荐

