Django 解决上传文件时 request.FILES 为空的问题

苏见山
苏见山
发布时间:2026-10-13| 5人浏览过
原创

本文介绍 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 为空的问题的全部内容分享完毕,希望能对大家有所帮助,也希望大家多多支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。