Django 解决上传文件时 request.FILES 为空的问题
本文介绍 Django 中处理文件上传时 request.FILES 为空或报错 NoneType 的常见原因及解决方法。核心在于 HTML 表单必须设置 enctype="multipart/form-data",且在 Django View 中需通过 request.FILES 而非 request.POST 获取文件对象。
Django 文件上传 request.FILES 为空的原因
在使用 HTML 的 form 表单上传文件时,若发现 Django 的 request.FILES 为空,即未接收到上传的文件,但 request.POST 中却存在文件名(仅作为字符串),这通常意味着配置有误。
解决方案:设置 enctype 属性
解决方法:
需要为 form 表单指定 enctype 属性,并将其值设置为 "multipart/form-data"。
enctype 属性用于规定在将表单数据发送到服务器之前应采用的编码方式。
| 值 | 描述 |
|---|---|
| application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
| multipart/form-data | 不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。 |
| text/plain | 空格转换为 “+” 加号,但不对特殊字符编码。 |
<form action="xxx" method="xxx" enctype="multipart/form-data">
完成上述设置后,即可在 request.FILES 中成功获取上传的文件。
处理 NoneType 报错及正确获取文件
补充知识:解决 Django 文件上传 views 报错 NoneType,其他能收到
当通过 Django 的 form 表单向后端提交文件时,可能会遇到如下报错:
'NoneType' object has no attribute 'name'
前端:
<form accept-charset="UTF-8" action="跳转链接" method="post">
<div>
<input type="file" name="t_photo" accept="image/*">
</div>
</form>
此时后端无法接收该文件,但其他字符串类型的数据可以正常接收。
解决:
1. 首先检查上传文件的 form 表单是否已添加 enctype="multipart/form-data"。默认情况下,编码类型 enctype 的值为 application/x-www-form-urlencoded,这种格式不能用于文件上传;只有使用 multipart/form-data 才能完整传递文件数据。
<form accept-charset="UTF-8" action="跳转链接" method="post" enctype="multipart/form-data">
<div>
<input type="file" name="t_photo" accept="image/*">
</div>
</form>
2. 再次确认,在 Django 的 view 中接收文件时,应从 FILES 中获取,而不是 POST。
request.POST.get('t_photo') # 不是在POST里 request.FILES.get('t_photo', None)
以上关于 Django 解决上传文件时 request.FILES 为空的问题的全部内容分享完毕,希望能对大家有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













