python实现上传下载文件功能

yipeiwu_com6年前Python基础

最近刚学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设计】。

相关文章

Spring Cloud Feign高级应用实例详解

这篇文章主要介绍了Spring Cloud Feign高级应用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.使用feig...

python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】

python 应用之Pycharm 新建模板默认添加编码格式-作者-时间等信息【推荐】

在pycharm使用过程中,对于每次新建文件的编码格式和关于代码编写者的一些个人信息快捷填写,方法如下: 1.打开pycharm,选择File-Settings(Ctrl + Alt +...

Python中自定义函数的教程

在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。 我们以自定义一个求绝对值的m...

基于Python实现迪杰斯特拉和弗洛伊德算法

图搜索之基于Python的迪杰斯特拉算法和弗洛伊德算法,供大家参考,具体内容如下 Djstela算法 #encoding=UTF-8 MAX=9 ''' Created on 20...

浅谈python函数之作用域(python3.5)

1 基本概念 1.1 命名空间 (namespace) 命名空间是变量名到对象的映射(name -> obj)。目前大多数的命名空间以类似于python字典的形式实现,实现形式在未...