2012-08-24 2 views
1

Est-il possible d'obtenir la taille d'un fichier à partir de la bibliothèque de documents dans le modèle de vélocité?Liferay - Obtenir la taille de fichier dans le modèle

J'ai une structure de contenu avec des fichiers répétitifs et un modèle très simple, comme ci-dessous:

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

Le $f.getType(), renvoie la valeur: document_library.

Merci!

Répondre

1

Malheureusement, ces informations ne sont pas directement accessibles depuis la variable $f qui a été injectée dans votre modèle par Liferay. Pour Liferay 6.1, le $f.data contient l'URL du document sous la forme suivante:

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

Heureusement, nous pouvons pirater notre chemin à travers cela et mettre la main sur le fichier réel en utilisant l'API de service, qui est accessible dans Modèles de vélocité grâce au $serviceLocator. Pour cette variable soit disponible, vous devez l'activer dans portal-ext.properties en configurant la propriété suivante:

# 
# Input a comma delimited list of variables which are restricted from the 
# context in Velocity based Journal templates. 
# 
journal.template.velocity.restricted.variables= 

Une fois que nous avons ce permis, nous pouvons appeler le service droit de récupérer un objet FileEntry sur la base des parties du document URL Et puis nous avons la taille aussi:

#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 
0

Cela ne fonctionne pas parce que vous devez échapper de url essayer ceci.

#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 
Questions connexes