开发环境:
本文章基于Django2.0.4框架,Python3.6.3版本,Apache2.4.23
更新:
测试发现,以下获取post上传文件的方法,只适用于较大文件的上传。文件较小时,上传的文件对应InMemoryUploadedFile对象,也就是Django框架直接将小文件读取到了内存中
项目需求:
form表单post上传Excel文件,Python接收上传的文件并处理。
需求分析:
要处理上传的Excel文件,就需要先获取post上传的临时文件路径。
Google了相关文章,如: 如何用python接收html页面上传的文件
首先都是通过:
uploadedFile = request.FILES.get('filename')
获取到上传的文件数据,但处理文件基本都是直接将uploadedFile保存到指定路径。
而处理Excel文件,Google到的相关文章基本都是读取一个静态的Excel文件,并没有动态获取post上传Excel文件的例子。
实现思路:
按照Google到的文章尝试后,得到一个有用的报错信息:
注意划线地方的TemporaryUploadedFile。Google到有关TemporaryUploadedFile的这篇文档:《Uploaded Files and Upload Handlers》
TemporaryUploadedFile是Uploaded的一个子类,而每个request.FILES都是一个Uploaded对象,Uploaded的相关信息可以具体看文档。
TemporaryUploadedFile就有一个我们需要的方法temporary_file_path()
于是:
uploadedFile = request.FILES.get('filename')
tempFilePath = uploadedFile.temporary_file_path()
即可获取post上传的临时文件路径,然后就可以使用openpyxl、xlrd等第三方处理上传的Excel文件。
处理Excel文件的相关文章:
openpyxl:https://www.jianshu.com/p/220b01d38f2c
xlrd:http://www.cnblogs.com/lhj588/archive/2012/01/06/2314181.html
一些处理Excel的第三方:http://www.python-excel.org/