我想跟踪从文档和媒体下载的所有文件,因此我编写了一个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模块。
答案 0 :(得分:1)
http://s
:显然是您的协议和服务器名称。documents
:一个关键字,它始终是相同的。以下是最多包含四个部分的路径。根据零件数量,它们可能有不同的含义:
http://s/documents/80327
80327
:FileShortcut(DLFileShortcut.fileShortcutId
)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.companyId
或Group.companyId
检索。
警告:元素及其顺序将来可能会发生变化。当前的实现可以在com.liferay.portal.webserver.WebServerServlet.getFileEntry(String[] pathArray)
。
这是社区维基的答案,因此您可以随意编辑它以添加/修复信息。