2010-09-02 12 views
13

Voglio caricare i file su un percorso che è ancora nel mio progetto django, ma nel mio percorso MEDIA_ROOT.Il file di caricamento di Django non nel percorso MEDIA_ROOT mi dà l'errore SuspiciousOperation

Quando provo a farlo, ottengo un errore SuspiciousOperation.

Qui ci sono i percorsi, come definito nel mio file di impostazioni:

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'static_serve') 
UPLOAD_DIR = os.path.join(os.path.dirname(__file__), 'uploads') 

che sto facendo questo perché non voglio che i file che sto caricando di essere accessibile tramite il browser e il mio percorso MEDIA_ROOT è.

Qualcuno ha idea di come aggirare questo errore.

+0

È possibile proibire al server Web di servire pubblicamente un determinato direttore in MEDIA_ROOT. –

+0

Sto usando il server di prova in questo momento ... su Windows XP. Non sono nemmeno sicuro di come farlo. – imns

+0

Non penso che il server di sviluppo possa, ma qualsiasi server Web pronto per la produzione dovrebbe essere in grado di limitare l'accesso ai file. [Qui] (http://httpd.apache.org/docs/2.0/misc/security_tips.html#protectserverfiles) è il modo Apache di farlo, per esempio. –

risposta

27

there is a way:

Da docs:

Ad esempio, il seguente codice negozio di file caricati sotto /media/foto indipendentemente da ciò che la vostra impostazione root_supporto è:

from django.db import models 
from django.core.files.storage import FileSystemStorage 

fs = FileSystemStorage(location='/media/photos') 

class Car(models.Model): 
    ... 
    photo = models.ImageField(storage=fs) 
+1

+1 Vale la pena saperlo. Peccato che l'OP non voterà questa la migliore risposta. – hughdbrown

+0

Ho avuto lo stesso problema. Ha fatto ciò che tu (e i documenti) ha detto e ottengo la seguente eccezione? I FileField richiedono un attributo "upload_to". Ho incollato l'intero blocco qui: http://dpaste.com/hold/533577/ Qualche idea? – xpanta

+1

Basta aggiungere upload_to allo stesso valore della posizione. – Tom

Problemi correlati