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

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,步骤如下:

  1. 获取服务器地址:通过PortalUtil.getPortalURL(request)获取
  2. 提取站点友好URL:从Group对象的getFriendlyURL()方法获取,去除开头的/
  3. 提取文件友好URL:从DLFileEntry对象的getFriendlyURL()方法获取
  4. 拼接成最终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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:43:21