2014-10-09 9 views
8

klasörüne kaydedin. POST aracılığıyla bir formdan dosya alan bir kod parçam var.Dosyayı Django

file = request.FILES['f'] 

settings.MEDIA_ROOT 

Ben diğerleri arasında, this answer bakıyordu benim medya klasörüne bu dosyayı kaydederken en basit yolu olabilir ama tanımsız isim ve geçersiz "parçalar atıfta hatalar vardı hangi

" yöntem.

Bunu yapmanın basit bir yolu olmalı? Benim views.py içinde

DÜZENLEME Yükleme yöntemi: Böyle bir upload_to parametresini belirtmek

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

gelen ContentFile ithal etmek unutma? Gönderdiğiniz çözümler haklı göründüğünüz gibi. Hata mesajını gönderir misin? Cevap için ikinci gönderiyi okudunuz mu? - bu hataya ne yapılacağını ve nasıl düzeltileceğini anlatıyor –

+0

Lütfen düzenlemelerime bakın, şimdi "genel adı 'ContentFile' tanımlı değil" " – Jon

+1

[django. core.files] (https://docs.djangoproject.com/en/1.7/ref/files/file/#the-contentfile-class) Kütüphane –

cevap

5

bir seçenek veritabanında kaydederek mı answer ikinci bölümü inceleyin ve django.core.files

+3

Kayıt için gerekli kod satırı "django.core.files.base contentFile dosyasından" – Jon

3

Sen, django FileField kullanabilirsiniz o desteklemektedir:

data_file = models.FileField(upload_to=content_path) 

content_path olabilir Bir dize veya bir dize döndüren bir işlev.