Bookmark and Share
You are here: Home Documentazione Guide Limitare il caricamento dei file in Plone 3
Document Actions

Limitare il caricamento dei file in Plone 3

Note: Return to tutorial view.

Questa guida illustra le strade possibili per limitare la dimensione massima dei file caricati dagli utenti del nostro portale Plone.

Introduzione

Perché limitare il caricamento dei file in Plone e quali strade intraprendere per ottenere il miglior risultato

Quando diamo la possibilità ai nostri utenti di caricare le immagini su Plone potrebbe non essere buona idea permettere il caricamento di immagini di grosse dimensioni.

In questo senso è possibile configurare i nostri content types in modo che rifiutino l'upload di file superiori a una certa dimensione.

Le strade per configurare queste opzioni possono essere due:

  • modificare il file di configurazione incluso nel prodotto ATContentTypes e impostare la configurazione per tutto il sistema.

  • impostare la modifica per ogni singolo content type personalizzando lo schema di ognuno.

Le due soluzioni sono state testate con:

  • Plone 3.0.6

  • ATContentTypes 1.2.4

  • Archetypes 1.5.6

  • ATCustomTypes 1.0.0-b1

Configurazione generale di ATContentTypes

Configurazione del comportamento di ATContenTypes per tutta l'istanza Zope

Andiamo nella cartella Products della nostra installazione di Plone e guardiamo all'interno del prodotto ATContentTypes.

Ricerchiamo della cartella etc il file atcontenttypes.conf.in (si dovrebbe trovare all'interno della cartella Products/ATContentTypes/etc), copiamolo all'interno della directory etc dell'istanza zope e rinominiamolo in atcontenttypes.conf

Apriamo il file appena creato con il nostro editor di testo preferito e ricerchiamo le varie impostazioni dei singoli content types.

In fondo al file troviamo le seguenti sezioni che definscono alcuni parametri per ogni content type:

<archetype ATDocument> ... </archetype>
<archetype ATEvent> ... </archetype>
<archetype ATNewsItem> ... </archetype>
<archetype ATFile> ... </archetype>
<archetype ATImage> ... </archetype>

I content Type che ci interessano sono quelli che danno la possibilità di inserire un immagine o un file:

  • ATNewsItem

  • ATFile

  • ATImage

All'interno di ognuna di queste sezioni troviamo l'attributo max_file_size impostato di default a 'no' ovvero nessun limite.

<archetype ATNewsItem>
 # maximum file size in byte, kb or mb
 max_file_size no
 ...
</archetype>

<archetype ATFile>
 # maximum file size in byte, kb or mb
 max_file_size no
</archetype>

<archetype ATImage>
 # maximum file size in byte, kb or mb
 max_file_size no
 ...
</archetype>

Possiamo quindi impostare questo parametro al valore che preferiamo in Kb o in mb:

es.

<archetype ATFile>
 # maximum file size in byte, kb or mb
 max_file_size 1mb
</archetype>

In questo modo consentiremo ai nostri utenti di caricare file con una dimensione massima di 1Mb.

L'impostazione varrà per tutti i content type ATFile sulla nostra istanza Zope. Possiamo quindi impostare lo stesso valore per gli altri content type sopra citati.

Allo stesso modo è possibile, tramite questo file, impostare un altro parametro riguardante nello specifico le sole immagini.

All'interno delle sezioni ATNewsItem e ATImage troviamo il parametro:

# maximum image dimension (w, h)
# 0,0 means no rescaling of the original image
max_image_dimension 0,0

Questa impostazione permette di riscalare la dimensione dell'immagine caricata a una dimensione fissa conservando il rapporto tra altezza e larghezza delle immagini.

Il seguente valore:

max_image_dimension 640,480

garantirà il ridimensionamento di tutte le immagini caricate ad una dimensione massima di 640 pixel di larghezza per 480 di altezza.

All'interno di questo file di configurazione troviamo altri interessanti parametri per configurare il funzionamento dei nostri content types.

La seguente sezione, per esempio, modificherà le impostazioni di PIL (Python Imaging Library) per il ridimensionamento delle immagini ed il loro salvataggio in Plone:

<pil_config>
 quality 90
 resize_algo antialias
</pil_config>

Il parametro quality imposta il livello di compressione delle immagini mentre resize_algo definisce l'algoritmo utilizzato per il ridimensionamento delle immagini (consiglio di consultare la documentaizone di PIL per maggiori dettagli).

Personalizzare i singoli content type

Configurare il comportamento attraverso un prodotto specifico

La personalizzazione dei singoli content types ha il vantaggio di essere una modifica meno invasiva della precedente nonché permette di avere un controllo su ogni installazione di Plone qualora coesistessero più siti plone sulla medesima istanza.

Per questa personalizzazione si è scelto di utilizzare il prodotto ATCustomTypes che contiene uno scheletro di base che ci permetterà di risparmiare tempo.

Tralasciando i dettagli di funzionamento di questo prodotto, diciamo solo che ATCustomTypes permette di modificare i content types di default di plone senza intervenire sul codice di ATContentTypes.

All'interno del prodotto ATCustomTypes troviamo la cartella content che contiene le definizioni dei nostri content types tra cui:

  • file.py

  • folder.py

  • image.py

di default questi file non fanno nient'altro che copiare la struttura originale dei content types cui fanno riferimento.

Intervenendo su queste impostazioni possiamo quindi modificare il comportamento dei contenuti che ci interessano.

Per impostare la dimensione massima dei file caricati su plone è sufficiente modificare lo schema del contentype aggiungendo l'attributo maxsize

Apriamo per esempio file.py per modificare il comportamento di ATFile

Per modificare la dimensione massima dei file caricati a 1Mb dobbiamo intervenire sul campo 'file' di questo ContentType.

Aggiungiamo quindi dopo la definizione dello schema:

schema = DefaultSchema.copy()

le seguenti linee di codice

field = schema['file']
field.maxsize = 1.0
field.registerLayer('maxsize', field.maxsize)

La prima riga definisce il campo da modificare, la seconda imposta il valore maxsize in Mb l'ultima riga registra il layer all'interno dello schema.

Per modificare ATImage apriamo il file image.py nella medesima cartella

e aggiungiamo le seguenti linee

field = schema['image']
field.maxsize = 1.0
field.registerLayer('maxsize', field.maxsize)

Allo stesso modo possiamo modificare newsitem.py per limitare l'upload dell'immagine allegata alle news.

Per questi ultimi due content types possiamo inoltre modificare la dimensione massima del ridimensionamento delle immagini caricate, come abbiamo fatto nel precedente esempio, modificando l'attributo max_size:

field = schema['image']
field.max_size = (640,480)

Le immagini caricate dagli utenti del portale che superano le dimensioni qui definite saranno ridimensionate di conseguenza.

Attraverso ATCustomTypes possono essere impostate molte altre modifiche ai contenuti di default di plone di cui si parlerà magari un'altra volta.

Buon lavoro!