Liferay - 在模板中获取文件大小

时间:2012-08-24 09:38:38

标签: liferay liferay-6 filesize liferay-velocity

是否可以在速度模板中从文档库中获取文件的大小?

我的内容结构包含重复文件和非常简单的模板,如下所示:

#foreach($f in $file.siblings)
    <a href="$f.getData()">download</a>
#end

$f.getType(),返回值:document_library

谢谢!

2 个答案:

答案 0 :(得分:1)

很遗憾,此信息无法直接通过Liferay在模板中注入的$f变量进行访问。对于Liferay 6.1,$f.data以下列形式保存文档的URL:

/documents/[group-id]/[folder-id]/[file-name]

幸运的是,我们可以通过这种方式破解我们的方式并使用服务API来获取实际文件,这可以通过$serviceLocator在Velocity模板中访问。要使此变量可用,您必须通过配置以下属性在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=

启用此功能后,我们可以根据文档URL中的部分调用正确的服务来检索FileEntry对象。然后我们也有大小:

#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

答案 1 :(得分:0)

那不行,因为你必须逃脱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