【问题标题】:How to obtain the download url for a document library content programmatically如何以编程方式获取文档库内容的下载 url
【发布时间】:2012-08-13 09:35:25
【问题描述】:

我的文档库中有几个内容(图像、文档、视频...),我想以编程方式获取每个内容的下载 url,以便我可以在自定义 portlet 中的 jsp 上显示它们。

调查,我发现这个页面有一个可能的解决方案: https://www.liferay.com/community/forums/-/message_boards/message/11073293 但我对此并不满意,因为它意味着使用多个参数手动构建 url。

我想知道是否有更好的方法(“Liferay 方式”)来做到这一点。

【问题讨论】:

  • 例如,要构建一个登录 url,您可以使用字符串 '/c/portal/login' 手动完成并获取 p_l_id 并连接...但不是手动执行此操作,您可以调用 themeDisplay.getURLSignIn() 和 Liferay 为你构建它。在这种情况下,我正在寻找类似的东西。

标签: liferay


【解决方案1】:

我很害怕,但那是生命之道:-)。

如果您仍需要更多确认,请查看 source codeDLUtil#getPreviewURL 方法。

liferay 的Documents & Media portletDocument and Media display portlet 都使用了这个方法。您还可以查看 JSP 源代码,了解这些 portlet 如何使用上述方法 /portal-web/docroot/html/portlet/document_library/action/download.jspf

附注:
您可以使用此static methodDLFileEntry 转换为FileEntry

【讨论】:

  • 感谢 Prakash,我对使用 Liferay 的方式并不感到不舒服,只要我可以从我的代码中使用 DLUtil.getPreviewURL 之类的方法并从细节中抽象出来。我感到不舒服的是必须自己手动构建网址。
  • 但是,我正在使用 DLFileEntry 对象,而 DLUtil.getPreviewURL 需要一个 FileEntry 对象。我该如何解决这个问题?我正在尝试从 DLFileEntry 投射,但这给了我一个错误。有什么想法吗?
  • 谢谢!这正是我所缺少的
  • 这是一个很好的解决方案,我总是用类似于 Mark 在另一个答案中建议的方法,通过使用文件夹和组 ID 构建 url!
【解决方案2】:

我经常看到 Liferay 来源的这些问题。这是在“文档和媒体库”portlet 中构建文件下载 url 的片段:

<liferay-ui:input-resource
   url='<%= themeDisplay.getPortalURL() + themeDisplay.getPathContext() + "/documents/" + themeDisplay.getScopeGroupId() + StringPool.SLASH + fileEntry.getUuid() %>'
/>

但你是对的,我也更喜欢像 DLFile.getUrl() 这样的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多