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入门及进阶笔记 Python 内置函数小结
Aug 09 Python
Python 正则表达式(转义问题)
Dec 15 Python
在Python中使用元类的教程
Apr 28 Python
python利用拉链法实现字典方法示例
Mar 25 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
Apr 27 Python
python 读取修改pcap包的例子
Jul 23 Python
详解Python 4.0 预计推出的新功能
Jul 26 Python
.dcm格式文件软件读取及python处理详解
Jan 16 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
Feb 20 Python
anaconda升级sklearn版本的实现方法
Feb 22 Python
python绘图subplots函数使用模板的示例代码
Apr 30 Python
Python3中最常用的5种线程锁实例总结
Jul 07 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输出xml必须header的解决方法
2014/10/17 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
PHP PDOStatement::closeCursor讲解
2019/01/30 PHP
laravel5 Eloquent 实现事务方式
2019/10/21 PHP
PHP实现简单的计算器
2020/08/28 PHP
JavaScript 撑出页面文字换行
2009/06/15 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
jquery实现盒子下拉效果示例代码
2013/09/12 Javascript
Knockout visible绑定使用方法
2013/11/15 Javascript
JavaScript作用域与作用域链深入解析
2013/12/06 Javascript
jQuery中prev()方法用法实例
2015/01/08 Javascript
jQuery实现预加载图片的方法
2015/03/17 Javascript
简单谈谈javascript Date类型
2015/09/06 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
微信小程序 参数传递实例代码
2017/03/20 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
JavaScript使用Ajax上传文件的示例代码
2017/08/10 Javascript
vue-resouce设置请求头的三种方法
2017/09/12 Javascript
js删除数组中的元素delete和splice的区别详解
2018/02/03 Javascript
vue中使用codemirror的实例详解
2018/11/01 Javascript
小程序文字跑马灯效果
2018/12/28 Javascript
详解微信小程序实现仿微信聊天界面(各种细节处理)
2019/02/17 Javascript
详解vue-cli+element-ui树形表格(多级表格折腾小计)
2019/04/17 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
[06:04]DOTA2国际邀请赛纪录片:Just For LGD
2013/08/11 DOTA
[01:41]DOTA2 2015国际邀请赛中国区预选赛第三日战报
2015/05/28 DOTA
python常规方法实现数组的全排列
2015/03/17 Python
Python 列表理解及使用方法
2017/10/27 Python
python 密码学示例——凯撒密码的实现
2020/09/21 Python
Python3.9.1中使用split()的处理方法(推荐)
2021/02/07 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
马来西亚网上购物:Youbeli
2018/03/30 全球购物
世界上最大的高分辨率在线图片库:Alamy
2018/07/07 全球购物
Nordgreen台湾官网:极简北欧设计手表
2019/08/21 全球购物
上课迟到检讨书
2014/01/19 职场文书