Uma das grandes vantagens do Zope/Plone é o seu banco de dados ZODB, porém existem situações onde é necessário armazenar grandes quantidades de arquivos, ou arquivos muito grandes. Isso pode acarretar no crescimento desnecessário do Data.fs. Uma das soluções existentes é a utilização do produto FileSystemStorage. O que ele faz é, disponibilizar um novo tipo storage para Archetypes, onde os valores dos campos como arquivos e imagens são armazenados no sistema de arquivos.
Primeiro precisamos baixar uma versão compatível com o Plone 2.5, segundo a página do produto a versão mais atual (2.7.1) só é suportada pela versão 3 do Plone. Sendo assim vamos precisar da versão 2.7.0, disponível aqui.
Instalação:
Existem 3 maneiras de instalar o FSS.
1ª) EGG
Baixe este egg, e utilize o easy_install para instalar.
# easy_install iw.fss-2.7.0-py2.4.egg
2ª)Instalando do SVN
Não encontrei o tar.gz da versão 2.7.0, sendo assim, baixei do repositório.
# svn export http://svn.plone.org/svn/collective/iw.fss/tags/2.7.0/ iw.fss
# cd iw.fss
# python setup.py install
3ª) Copiando para lib/pyton
Segue os mesmos passos acima, porém, ao invés de excutar o último comando, copiamos a pasta iw para a lib/python da sua instância.
# svn export http://svn.plone.org/svn/collective/iw.fss/tags/2.7.0/ iw.fss
# cd iw.fss
# cp iw $INSTANCE_HOME/lib/python
Configuração
Podemos notar que o FSS já adota os padrões do zope 3, ou seja, não é simplesmente extrair seu conteúdo na pasta Products e pronto. Para que ele seja carregado necessitamos criar algums arquivos zcml.
$INSTANCE_HOME/etc/package-includes/iw.fss-meta.zcml, com a linha:
<include package="iw.fss" file="meta.zcml"/>
$INSTANCE_HOME/etc/package-includes/iw.fss-configure.zcml, com a linha:
<include package="iw.fss" />
OBS.: No Plone 2.5 pode acontecer de não existir a pasta package-include em $INSTANCE_HOME/etc, se for este o caso será necessário copiar o conteúdo de $ZOPE_HOME/lib/python/Products/Five/skel para $INSTANCE_HOME/etc.
Agora abra o arquivo $INSTANCE_HOME/lib/python/iw/fss/etc/plone-filesystemstorage.conf e defina as variáveis abaixo:
storage-path $$INSTANCE_HOME/var/fss_files
backup-path $$INSTANCE_HOME/var/fss_backup
storage-strategy flat
storage-path e backup-path são, respectivamente, os caminhos de onde ficarão os arquivos e os backups. Já storage-strategy é tipo de estratégia utilizada para armezar os arquivos, por enquanto vamos deixar a estratégia padrão ‘flat’.
Verifique se o FSS está diponível para instalação. Caso sim, você fez tudo corretamente. Seguindo…
Alterando o storage para arquivos e imagens
Até agora o que fizemos foi instalar e configurar o FSS, mas só isso não basta. Para que os arquivos e as imagens dos content-types padrão do Plone (News Item, File e Image) passem a utilizá-lo precisamos de mais um passo. Adcione a seguinte linha em algum dos arquivos em $INSTANCE_HOME/etc/package-includes:
<include package="iw.fss" file="atct.zcml" />
Agora reinicie o zope e adicione uma nova imagem ou arquivo e verifique na pasta que você definiu como storage e note que agora existe um arquivo lá.
Definindo tipos em produtos personalizados
Muitas vezes somente os tipos padrão do plone não suficientes, e temos que criar nossos próprios tipos. Para utilizar o FSS em nossos produtos personalizados fazemos o seguinte:
from iw.fss.FileSystemStorage import FileSystemStorage
...
my_schema = Schema((
FileField('file',
...
storage=FileSystemStorage(),
widget=FileWidget(...)
),
...
))
...
Bem simples, faça o mesmo na definição do seu tipo e o arquivo será salvo no sistema de arquivos. Para quem usa o Plone 3, os passos são parecidos, porém pode-se utilizar o buildout para facilitar ainda mais o processo.
Esse foi o meu primeiro(de muitos) tutorial, espero que gostem. t+