Django批量上传多个文件的实现方法

Hazel
Hazel
发布时间:2026-10-12| 3人浏览过
原创

本文介绍如何在Django框架中实现一次性上传多个文件的功能。通过HTML5的multiple属性启用多选,并在后端使用request.FILES.getlist()方法获取文件列表,遍历处理每个文件的写入操作,完成批量上传逻辑。

Django实现批量文件上传

在Web开发中,批量上传文件是一个常见需求。HTML5标准允许文件输入控件支持选择多个文件,现代浏览器(如Chrome)也支持用户一次性选择多个文件进行上传。然而,在Django框架中处理这些上传的文件时,需要注意特定的API用法。

前端实现

在前端HTML表单中,只需在标签中添加multiple属性即可启用多选文件功能。例如:

后端处理逻辑

当用户提交包含多个文件的表单时,Django会将上传的文件存储在request.FILES中。需要注意的是,request.FILES的类型是MultiValueDict,而不是普通的字典。如果直接使用request.FILES['myfiles'],它只会返回最后一个上传的文件,这不符合批量上传的预期。

为了获取所有上传的文件列表,应使用getlist()方法。具体操作步骤如下:

  1. 通过request.FILES.getlist('myfiles')获取文件对象列表。
  2. 遍历该列表,对每个文件对象进行处理。
  3. 为每个文件创建目标路径并写入数据。

以下是处理批量上传文件的Python代码示例:

files = request.FILES.getlist('myfiles')
for f in files:
   destination = open('d:/temp/' + f.name,'wb+')
   for chunk in f.chunks(): 
     destination.write(chunk)
   destination.close()

在上述代码中,f.chunks()用于分块读取文件内容,这对于处理大文件尤为重要,可以避免一次性加载整个文件到内存中导致内存溢出。遍历每个文件块并将其写入目标文件后,记得关闭文件句柄。

注意事项

  • 确保目标目录(如示例中的d:/temp/)存在且具有写入权限。
  • 在实际生产环境中,建议对上传的文件名进行安全处理,避免路径遍历攻击。
  • 对于大文件上传,需配置Django的FILE_UPLOAD_MAX_MEMORY_SIZE和DATA_UPLOAD_MAX_MEMORY_SIZE参数,以及调整Web服务器(如Nginx)的client_max_body_size设置。

以上就是Django框架实现一次性上传多个文件功能的详细内容,更多关于Django文件上传的资料请关注本站其它相关文章!

相关标签:

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

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 算法库。