Django2.2丨文件上传

这篇博客详细介绍了在Django2.2中如何处理文件上传,包括简单文件上传的步骤,通过模型来管理上传文件的方法,以及上传数据的存储机制,特别强调了大文件上传时内存管理和临时文件的使用。
摘要由CSDN通过智能技术生成
简单文件上传
# forms.py
from django import forms

class UploadFileForm(forms.Form):
    title = forms.CharField(max_length=50)
    file = forms.FileField()

只有在请求是通过POST提交且提交的<form>表单有enctype="multipart/form-data"属性的时候,request.FILES才会包含文件数据,否则的话,request.FILES是空的。

# views.py
from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm

# Imaginary function to handle an uploaded file.
from somewhere import handle_uploaded_file

def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            handle_uploaded_file(request.FILES['file'])
            return HttpResponseRedirect('/success/url/')
    else:
        form = UploadFileForm()
    return render(request, 'upload.html', {'form': form})

处理上传文件

def handle_uploaded_file(f):
    with open('some/file/name.txt', 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)

使用UploadedFile.chunks()而不是read()是为了确保即使是大文件又不会将系统的内存占满。

通过模型来处理上传的文件

在Model保存文件,当调用form.save()时,文件对象将会被保存在对应FileField的upload_to参数所指定的地方

from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import ModelFormWithFileField

def upload_file(request):
    if request.method == 'POST':
        form = ModelFormWithFileField(request.POST, request.FILES)
        if form.is_valid():
            # file is saved
            form.save()
            return HttpResponseRedirect('/success/url/')
    else:
        form = ModelFormWithFileField()
    return render(request, 'upload.html', {'form': form})
上传数据的存储

默认情况下,如果上传的文件小于2.5兆,Django将把文件的所有内容保存到内存里。

但如果上传的文件很大,Django会把文件写入系统临时目录的临时文件里存储。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值