2014-10-09 12 views
8

Ho un pezzo di codice che ottiene un file da un modulo tramite POST.Basta salvare il file nella cartella in Django

file = request.FILES['f'] 

Quale sarebbe il modo più semplice di salvare questo file alla mia cartella supporto in

settings.MEDIA_ROOT 

stavo guardando this answer, tra gli altri, ma ho dovuto errori riferendosi ai nomi indefiniti e pezzi non validi" " metodo.

Ci deve essere un modo semplice per farlo?

EDIT Carica metodo nella mia views.py:

def upload(request): 
    folder = request.path.replace("/", "_") 
    uploaded_filename = request.FILES['f'].name 

    # create the folder if it doesn't exist. 
    try: 
     os.mkdir(os.path.join(settings.MEDIA_ROOT, folder)) 
    except: 
     pass 

    # save the uploaded file inside that folder. 
    full_filename = os.path.join(settings.MEDIA_ROOT, folder, uploaded_filename) 
    fout = open(full_filename, 'wb+') 

    file_content = ContentFile(request.FILES['f'].read()) 

    # Iterate through the chunks. 
    for chunk in file_content.chunks(): 
     fout.write(chunk) 
    fout.close() 
+0

è salvare nel database un'opzione? Le soluzioni pubblicate che ti sembra siano corrette. Puoi pubblicare il messaggio di errore? Hai letto il secondo post per la risposta - racconta l'errore di chunck e come risolverlo –

+0

Vedi le mie modifiche, ora ho "nome globale" ContentFile "non è definito" – Jon

+1

Puoi trovarlo nel [django. core.files] (https://docs.djangoproject.com/en/1.7/ref/files/file/#the-contentfile-class) Biblioteca –

risposta

5

vedere la seconda parte del answer, e non dimenticate di importare ContentFile da django.core.files

+3

Per la cronaca, la riga di codice necessaria è "da django.core.files.base import ContentFile" – Jon

3

È possibile utilizzare Django FileField, è sostenere specificare un parametro upload_to, in questo modo:

data_file = models.FileField(upload_to=content_path) 

Dove content_path può essere una stringa o una funzione che restituisce una stringa.

Problemi correlati