ベロシティ テンプレートのドキュメント ライブラリからファイルのサイズを取得することはできますか?
以下のように、繰り返しファイルと非常に単純なテンプレートを含むコンテンツ構造があります。
#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 を使用して実際のファイルを取得することができます$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
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