python实现上传下载文件功能


Posted in Python onNovember 19, 2020

最近刚学python,遇到上传下载文件功能需求,记录下!

django web项目,前端上传控件用的是uploadify。

文件上传 - 后台view 的 Python代码如下:

@csrf_exempt
@require_http_methods(["POST"])
def uploadFiles(request):
 try:
 user = request.session.get('user')
 allFimeNames = ""
 #获取所有上传文件
 files = request.FILES.getlist("file")
 for file in files:
  # 获取文件名 解析文件后缀 获取新文件名
  oldName = file.name
  filename = str(int(time.time() * 10))+"."+oldName.split(".")[1]
  now = datetime.now()
  filePath = os.path.join("developmentTask",str(user.get("userId"))+"-"+now.strftime('%Y-%m-%d'))
  dirpath = os.path.join(settings.UPLOADFILES_DIRS , filePath)
  #写入服务器
  if not os.path.exists(dirpath):
  os.makedirs(dirpath)
  newFilePath = os.path.join(dirpath, filename)
  with open(newFilePath, 'wb+') as destination:
  for chunk in file.chunks():
   destination.write(chunk)
  #返回新文件名 多个用逗号隔开
  allFimeNames = os.path.join(filePath,filename)
 except Exception:
 return JsonResponse(data={'error': "系统异常"}, status=400)
 return JsonResponse(data={'filePath': allFimeNames})

request.FILES.getlist("file")此处的file 是前端页面的文件提交的名称,可以在uploadify中配置。

文件下载:

@csrf_exempt
@require_http_methods(["GET"])
def downloadFile(request):
 filePath = request.GET.get("filepath")
 fileName = request.GET.get("filename")
 file_name = os.path.join(settings.UPLOADFILES_DIRS, filePath)
 if os.path.exists(file_name):
 def file_iterator(file_name, chunk_size=512):
  with open(file_name) as f:
  while True:
   c = f.read(chunk_size)
   if c:
   yield c
   else:
   break
 response = StreamingHttpResponse(file_iterator(file_name))
 response['Content-Type'] = 'application/octet-stream'
 response['Content-Disposition'] = 'attachment;filename="{0}"'.format(fileName)
 return response
 response = StreamingHttpResponse("文件不存在!")
 response['Content-Type'] = 'application/octet-stream'
 response['Content-Disposition'] = 'attachment;filename="{0}"'.format("")
 return response

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于python的汉字转GBK码实现代码
Feb 19 Python
python编写的最短路径算法
Mar 25 Python
python实现在字符串中查找子字符串的方法
Jul 11 Python
Python网站验证码识别
Jan 25 Python
Python使用设计模式中的责任链模式与迭代器模式的示例
Mar 02 Python
浅谈python 四种数值类型(int,long,float,complex)
Jun 08 Python
Python使用time模块实现指定时间触发器示例
May 18 Python
简单分析python的类变量、实例变量
Aug 23 Python
Python获取一个用户名的组ID过程解析
Sep 03 Python
Python使用微信接入图灵机器人过程解析
Nov 04 Python
Python阶乘求和的代码详解
Feb 14 Python
python读取hdfs并返回dataframe教程
Jun 05 Python
分享几道你可能遇到的python面试题
Jul 24 #Python
python 判断是否为正小数和正整数的实例
Jul 23 #Python
python WindowsError的错误代码详解
Jul 23 #Python
python实现发送邮件功能
Jul 22 #Python
Python编程之列表操作实例详解【创建、使用、更新、删除】
Jul 22 #Python
Python原始字符串与Unicode字符串操作符用法实例分析
Jul 22 #Python
安装Python的教程-Windows
Jul 22 #Python
You might like
PHP实现微信模拟登陆并给用户发送消息的方法【文字,图片,图文】
2017/06/29 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
如何让您的中波更粗更长 - 中波框形天线制作
2021/03/10 无线电
jquery的颜色选择插件实例代码
2008/10/02 Javascript
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
chrome不支持form.submit的解决方案
2015/04/28 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
深入了解JavaScript的逻辑运算符(与、或)
2016/12/20 Javascript
javascript函数的四种调用模式
2017/01/08 Javascript
js实现PC端和移动端刮卡效果
2020/03/27 Javascript
Bootstrap下拉菜单更改为悬停(hover)触发的方法
2017/05/24 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
Vue.js 2.x之组件的定义和注册图文详解
2018/06/19 Javascript
element-ui和vue表单(对话框)验证提示语(残留)清除操作
2020/09/11 Javascript
vue3中轻松实现switch功能组件的全过程
2021/01/07 Vue.js
[01:18:43]2014 DOTA2华西杯精英邀请赛5 24 iG VS DK
2014/05/25 DOTA
[01:12]DOTA2 2015年秋季互动指南
2015/11/10 DOTA
[36:19]2018DOTA2亚洲邀请赛 小组赛 A组加赛 Newbee vs LGD
2018/04/03 DOTA
Python中使用装饰器时需要注意的一些问题
2015/05/11 Python
Python命令行解析模块详解
2018/02/01 Python
python开头的coding设置方法
2019/08/08 Python
Django框架HttpResponse对象用法实例分析
2019/11/01 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
Django filter动态过滤与排序实现过程解析
2020/11/26 Python
"引用"与多态的关系
2013/02/01 面试题
运动会广播稿100字
2014/01/11 职场文书
公司总经理任命书
2014/06/05 职场文书
三八妇女节慰问信
2015/02/14 职场文书
幼儿园教师节活动总结
2015/03/23 职场文书
开学典礼校长致辞
2015/07/29 职场文书
《静夜思》教学反思
2016/02/17 职场文书
MySQL 使用事件(Events)完成计划任务
2021/05/24 MySQL
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
深入解析MySQL索引数据结构
2021/10/16 MySQL