是否可以从速度模板中的文档库中获取文件的大小?
我有一个包含重复文件的内容结构和一个非常简单的模板,如下所示:
#foreach($f in $file.siblings)
<a href="$f.getData()">download</a>
#end
,$f.getType()
返回值:document_library
。
谢谢!
是否可以从速度模板中的文档库中获取文件的大小?
我有一个包含重复文件的内容结构和一个非常简单的模板,如下所示:
#foreach($f in $file.siblings)
<a href="$f.getData()">download</a>
#end
,$f.getType()
返回值:document_library
。
谢谢!
$f
不幸的是,不能从Liferay 注入到您的模板中的变量直接访问此信息。对于 Liferay 6.1,$f.data
以以下形式保存文档的 url:
/documents/[group-id]/[folder-id]/[file-name]
幸运的是,我们可以通过这个破解我们的方式并通过使用服务 API 来获取实际文件,这要归功于 Velocity 模板中的$serviceLocator
. 要使此变量可用,您必须portal-ext.properties
通过配置以下属性来启用它:
#
# Input a comma delimited list of variables which are restricted from the
# context in Velocity based Journal templates.
#
journal.template.velocity.restricted.variables=
启用此功能后,我们可以调用正确的服务来FileEntry
根据文档 URL 中的部分检索对象。然后我们也有大小:
#set($url = $f.data)
#set($parts = $stringUtil.split($url, "/"))
#set($group_id = $getterUtil.getLong($parts.get(2)))
#set($folder_id = $getterUtil.getLong($parts.get(3)))
#set($doc_name = $parts.get(4))
#set($docService = $serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLAppLocalService"))
#set($fileEntry = $docService.getFileEntry($group_id, $folder_id, $doc_name))
The file size is: $fileEntry.size
这不起作用,因为您必须转义 de url 试试这个。
#set($url = $httpUtil.decodeURL($ficheiro.getData(), true))
#set($parts = $stringUtil.split($url, "/"))
#set($group_id = $getterUtil.getLong($parts.get(2)))
#set($folder_id = $getterUtil.getLong($parts.get(3)))
#set($doc_name = $parts.get(4))
#set($docService = $serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLAppLocalService"))
#set($fileEntry = $docService.getFileEntry($group_id, $folder_id, $doc_name))
The file size is: $fileEntry.size