Django学习笔记之文件上传

Django在处理文件上传的时候,文件数据被保存在了request.FILES。FILES中的每个键为中的name
设置文件的存储路径:
1.在项目根目录下static中创建media文件夹
2.图片上传后,会被保存到“/static/media/文件”
3.打开settings.py文件,增加media_root

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
]
# 文件上传路径
MEDIA_ROOT = os.path.join(BASE_DIR,'static/media')

模板文件:

<form action="" method="post" enctype="multipart/form-data"> {% csrf_token %}
    <input type="file" name= "file"> <br>
    <input type="submit" value="上传">
    </form>

FILES只有在请求的方法为POST 且提交的带有enctype=”multipart/form-data” 的情况下才会包含数据。否则,FILES 将为一个空的类似于字典的对象

视图函数:

# views.py
import os
from Django_框架.settings import MEDIA_ROOT


def upload_test(request):
    if request.method == 'GET':
        return render(request,'douban/file_upload.html')
    elif request.method == 'POST':
        # 通过request.FILE获取到文件
        f1 = request.FILES['file']
        print(f1.name) # 获取到文件的名字
        f1_name = os.path.join(MEDIA_ROOT,f1.name)
        print(f1_name) # 文件的完整路径
        with open(f1_name,'wb') as ff:
            for c in f1.chunks():
                ff.write(c)
        return HttpResponse('上传文件成功')
    else:
        return HttpResponse('上传文件 ERROR')