解构文档和媒体下载URL

时间:2017-11-01 08:23:55

标签: liferay-7

我想跟踪从文档和媒体下载的所有文件,因此我编写了一个Servlet过滤器,可在下载文件时获取URL。根据文件下载UI的位置,它可能如下所示:

http://s/documents/20143/32701/SomeFile.txt/da99a46a-8231-2a87-ff8d-8d3b2d388c24
http://s/documents/20143/0/invoice_ABC.pdf/c44fd479-331b-f393-7879-973c5cecf086

在我的审核中,我想写下有关下载文件的详细信息,因此我需要从该URL中提取信息。

网址的每个部分是什么?

注意:我知道按此顺序依赖这些参数是危险的,但在进行审核时我不认为有更好的选择,因为下载后的Java代码无法被覆盖OSGi模块。

1 个答案:

答案 0 :(得分:1)

  • http://s:显然是您的协议和服务器名称。
  • documents:一个关键字,它始终是相同的。

以下是最多包含四个部分的路径。根据零件数量,它们可能有不同的含义:

  • http://s/documents/80327

    • 80327:FileShortcut(DLFileShortcut.fileShortcutId
    • 的ID
    • 可以找到文件条目:DLAppServiceUtil.getFileEntry(DLAppServiceUtil.getFileShortcut(80327).getToFileEntryId())
  • http://s/documents/20143/da99a46a-8231-2a87-ff8d-8d3b2d388c24

    • 20143:文件条目所属的网站/组的ID(DLFileEntry.groupId
    • da99a46a-8231-2a87-ff8d-8d3b2d388c24:文件条目的UUID(DLFileEntry.uuid
    • 可以找到文件条目:DLAppServiceUtil.getFileEntryByUuidAndGroupId("da99a46a-8231-2a87-ff8d-8d3b2d388c24", 20143)
  • http://s/documents/20143/32701/SomeFile.txt

    • 20143:文件条目所属的网站/组的ID(DLFileEntry.groupId
    • 32701:文件条目所属的文件夹的ID(DLFileEntry.folderId
    • SomeFile.txt:文件的名称,特殊字符编码为网址转义序列(DLFileEntry.name
    • 可以找到文件条目:DLAppServiceUtil.getFileEntry(20143, 32701, HttpUtil.decodeUrl("SomeFile.txt"))
  • http://s/documents/20143/32701/SomeFile.txt/da99a46a-8231-2a87-ff8d-8d3b2d388c24

    • 20143:文件条目所属的网站/组的ID(DLFileEntry.groupId
    • 32701:文件条目所属文件夹的ID - 忽略
    • SomeFile.txt:文件的名称 - 忽略
    • da99a46a-8231-2a87-ff8d-8d3b2d388c24:文件条目的UUID。 (DLFileEntry.uuid
    • 可以找到文件条目:DLAppServiceUtil.getFileEntryByUuidAndGroupId("da99a46a-8231-2a87-ff8d-8d3b2d388c24", 20143)

Liferay通常会生成最后一种格式的网址,以便或多或少地对#34;友好"对移动或重命名文件进行强化的URL。

显着缺席的是公司ID,可以从DLFileEntry.companyIdGroup.companyId检索。

警告:元素及其顺序将来可能会发生变化。当前的实现可以在com.liferay.portal.webserver.WebServerServlet.getFileEntry(String[] pathArray)

中找到

这是社区维基的答案,因此您可以随意编辑它以添加/修复信息。