2014-10-09 8 views
8

Ich habe ein Stück Code, der eine Datei aus einem Formular per POST bekommt.Einfach Datei in Ordner in Django speichern

file = request.FILES['f'] 

Was unter anderem in

settings.MEDIA_ROOT 

Ich war auf der Suche auf this answer, die einfachste Art und Weise des Sparens diese Datei in meinem Media-Ordner sein würde, aber ich hatte Fehler zu undefinierten Namen und ungültig „Chunks beziehen " Methode.

Es muss einen einfachen Weg geben, dies zu tun?

EDIT Upload-Methode in meinem 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

speichert es in der Datenbank eine Option zu importieren? Die geposteten Lösungen, auf die Sie Bezug nehmen, scheinen richtig zu sein. Können Sie die Fehlermeldung posten? Hast du den zweiten Beitrag zur Antwort gelesen - er sagt über den chunck Fehler und wie man ihn repariert –

+0

Bitte sehe meine Änderungen, ich bekomme jetzt "globalen Namen 'ContentFile' ist nicht definiert" – Jon

+1

Sie finden es in der [django. core.files] (https://docs.djangoproject.com/en/1.7/ref/files/file/#the-contentfile-class) Bibliothek –

Antwort

5

Siehe den zweiten Teil des answer, und vergessen Sie nicht ContentFile von django.core.files

+3

Für den Datensatz ist die Codezeile benötigt "von django.core.files.base Import ContentFile" – Jon

3

Sie django können FileField, unterstützen sie einen upload_to Parameter angeben, wie folgt aus:

data_file = models.FileField(upload_to=content_path) 

Wo content_path kann sein eine Zeichenfolge oder eine Funktion, die eine Zeichenfolge zurückgibt.

Verwandte Themen