2014-10-09 16 views
8

Tôi có một đoạn mã nhận tệp từ biểu mẫu qua POST.Chỉ cần lưu tệp vào thư mục trong Django

file = request.FILES['f'] 

Điều gì sẽ là cách đơn giản nhất của tiết kiệm tập tin này vào thư mục phương tiện truyền thông của tôi trong

settings.MEDIA_ROOT 

tôi đang tìm kiếm tại this answer, trong số những người khác, nhưng tôi có lỗi đề cập đến tên undefined và khối không hợp lệ" " phương pháp.

Phải có cách đơn giản để thực hiện việc này?

EDIT phương pháp Tải lên trong views.py tôi:

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

là lưu nó trong cơ sở dữ liệu một lựa chọn? Các giải pháp được đăng mà bạn cho là có vẻ đúng. Bạn có thể gửi thông báo lỗi không? Bạn đã đọc bài đăng thứ hai để trả lời - nó nói về lỗi chunck và cách sửa lỗi –

+0

Vui lòng xem các chỉnh sửa của tôi, bây giờ tôi nhận được "tên toàn cầu 'ContentFile' không được xác định" – Jon

+1

Bạn có thể tìm thấy nó trong [django. core.files] (https://docs.djangoproject.com/en/1.7/ref/files/file/#the-contentfile-class) Thư viện –

Trả lời

5

Xem phần thứ hai của answer, và đừng quên để nhập khẩu ContentFile từ django.core.files

+3

Đối với hồ sơ, dòng mã cần thiết là "từ django.core.files.base nhập khẩu ContentFile" – Jon

3

Bạn có thể sử dụng django FileField, nó hỗ trợ định một tham số upload_to, như thế này:

data_file = models.FileField(upload_to=content_path) 

đâu content_path có thể một chuỗi hoặc một hàm trả về một chuỗi.

Các vấn đề liên quan