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+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
python使用生成器实现可迭代对象
Mar 20 Python
Python实现定时精度可调节的定时器
Apr 15 Python
使用pandas对两个dataframe进行join的实例
Jun 08 Python
Jacobi迭代算法的Python实现详解
Jun 29 Python
pip指定python位置安装软件包的方法
Jul 12 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
Oct 18 Python
Python帮你识破双11的套路
Nov 11 Python
Python包,__init__.py功能与用法分析
Jan 07 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
Feb 07 Python
Python日期格式和字符串格式相互转换的方法
Feb 18 Python
Python 实现键盘鼠标按键模拟
Nov 18 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备份/还原MySQL数据库的代码
2011/01/06 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
2013/09/28 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
Yii中CGridView禁止列排序的设置方法
2016/07/12 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
jQuery 常见开发使用技巧总结
2009/12/26 Javascript
jQuery 获取URL参数的插件
2010/03/04 Javascript
zShowBox 图片放大展示jquery版 兼容性
2011/09/24 Javascript
jQuery遍历Table应用示例
2014/04/09 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
JavaScript中字符串(string)转json的2种方法
2015/06/25 Javascript
JQuery实现简单的图片滑动切换特效
2015/11/22 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
详解jquery事件delegate()的使用方法
2016/01/25 Javascript
微信小程序开发之圆形菜单 仿建行圆形菜单实例
2016/12/12 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
Angular2整合其他插件的方法
2018/01/20 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
详解如何使用node.js的开发框架express创建一个web应用
2018/12/20 Javascript
微信小程序按钮点击跳转页面详解
2019/05/06 Javascript
Python网络爬虫四大选择器用法原理总结
2020/06/01 Python
Python Scrapy图片爬取原理及代码实例
2020/06/12 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
重新定义牛仔布,100美元以下:Warp + Weft
2018/07/25 全球购物
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
优秀教师获奖感言
2014/01/31 职场文书
生产厂长岗位职责
2014/02/21 职场文书
初中学习计划书范文
2014/09/15 职场文书
党员组织生活会发言材料
2014/10/17 职场文书
职工宿舍管理制度
2015/08/05 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python
 Redis 串行生成顺序编码的方法实现
2022/04/03 Redis