django框架实现一次性上传多个文件功能示例【批量上传】


Posted in Python onJune 19, 2019

本文实例讲述了django框架实现一次性上传多个文件功能。分享给大家供大家参考,具体如下:

在用django 写文件上传的时候,从request.FILES['myfiles'] 获取到的文件始终只有一个, 但在HTML页面上明明用 HTML5 的 文件控件选择了多个文件,用的是CHROME  浏览器,一次可以选择多个文件上传。在 Pydev 开启debug模式,查看request 对象,发现上传的多个文件确实在request对象中,但为什么 用request.FILES['myfiles'] 却只能得到一个呢?

前端 html5 上传控件, 我用了jquery file upload

<input type="file" name="myfiles" multiple="">

django框架实现一次性上传多个文件功能示例【批量上传】

选择多个文件之后, 然后提交请求,开启pydev debug 模式,查看request内容:

django框架实现一次性上传多个文件功能示例【批量上传】

其中request.FILES 的内容为如下:

MultiValueDict: <MultiValueDict: {u'myfiles': [<InMemoryUploadedFile: 300x600.png (image/png)>, <InMemoryUploadedFile: todo.txt (text/plain)>]}>

很明显,上传的文件的确在其中,但是当用 request.FILES['myfiles'] 得到的确是最后一个。 而不能得到两个文件。跟踪代码发现,request.FILES 的类型为 MultiValueDict,这种字典类是特殊定义的,如果需要取得list 需要调用 getlist  方法,看到这里,豁然开朗,下面是得到上传的多个文件与处理的逻辑

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()

其实很简单的,就是不细心,另外django 默认是只处理单个文件上传的,要一次性批量处理多个文件上传就得采用这种方法。

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
python中的多重继承实例讲解
Sep 28 Python
Django的信号机制详解
May 05 Python
Python通过OpenCV的findContours获取轮廓并切割实例
Jan 05 Python
Django进阶之CSRF的解决
Aug 01 Python
django删除表重建的实现方法
Aug 28 Python
利用pandas合并多个excel的方法示例
Oct 10 Python
Python二元赋值实用技巧解析
Oct 25 Python
将python2.7添加进64位系统的注册表方式
Nov 20 Python
python如何使用代码运行助手
Jul 03 Python
Python中实现一行拆多行和多行并一行的示例代码
Sep 06 Python
利用python批量爬取百度任意类别的图片的实现方法
Oct 07 Python
python如何读取.mtx文件
Apr 22 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
Jun 19 #Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 #Python
python 读写excel文件操作示例【附源码下载】
Jun 19 #Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 #Python
网易有道2017内推编程题 洗牌(python)
Jun 19 #Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 #Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 #Python
You might like
PHP学习资料汇总与网址
2007/03/16 PHP
PHP 第二节 数据类型之数组
2012/04/28 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
laravel配置Redis多个库的实现方法
2019/04/10 PHP
SyntaxHighlighter语法高亮插件使用说明
2011/08/14 Javascript
JS清除选择内容的方法
2015/01/29 Javascript
前端js文件合并的三种方式推荐
2016/05/19 Javascript
jQuery使用DataTable实现删除数据后重新加载功能
2017/02/27 Javascript
Bootstrap媒体对象学习使用
2017/03/07 Javascript
JS实现标签页切换效果
2017/05/04 Javascript
微信小程序 循环及嵌套循环的使用总结
2017/09/26 Javascript
浅谈ajax请求不同页面的微信JSSDK问题
2018/02/26 Javascript
JS面试题大坑之隐式类型转换实例代码
2018/10/14 Javascript
小程序rich-text组件如何改变内部img图片样式的方法
2019/05/22 Javascript
vue-router两种模式区别及使用注意事项详解
2019/08/01 Javascript
javascript实现画板功能
2020/04/12 Javascript
Vue移动端项目实现使用手机预览调试操作
2020/07/18 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
微信小程序实现日历小功能
2020/11/18 Javascript
在Vue中使用mockjs代码实例
2020/11/25 Vue.js
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
在Docker上开始部署Python应用的教程
2015/04/17 Python
Python基于socket模块实现UDP通信功能示例
2018/04/10 Python
pandas object格式转float64格式的方法
2018/04/10 Python
python gdal安装与简单使用
2019/08/01 Python
python支付宝支付示例详解
2019/08/22 Python
python GUI库图形界面开发之PyQt5树形结构控件QTreeWidget详细使用方法与实例
2020/03/02 Python
Django中F函数的使用示例代码详解
2020/07/06 Python
多视角3D可旋转的HTML5 Logo动画
2016/03/02 HTML / CSS
HTML利用九宫格原理进行网页布局
2020/03/13 HTML / CSS
美国鞋类购物网站:Shiekh Shoes
2016/08/21 全球购物
法国家具及室内配件店:home24
2017/01/21 全球购物
经典c++面试题四
2015/05/14 面试题
高一历史教学反思
2014/01/13 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
Vue-Element-Admin集成自己的接口实现登录跳转
2021/06/23 Vue.js