python实现上传下载文件功能
最近刚学python,遇到上传下载文件功能需求,记录下!
djangoweb项目,前端上传控件用的是uploadify。
文件上传-后台view的Python代码如下:
@csrf_exempt @require_http_methods(["POST"]) defuploadFiles(request): try: user=request.session.get('user') allFimeNames="" #获取所有上传文件 files=request.FILES.getlist("file") forfileinfiles: #获取文件名解析文件后缀获取新文件名 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) #写入服务器 ifnotos.path.exists(dirpath): os.makedirs(dirpath) newFilePath=os.path.join(dirpath,filename) withopen(newFilePath,'wb+')asdestination: forchunkinfile.chunks(): destination.write(chunk) #返回新文件名多个用逗号隔开 allFimeNames=os.path.join(filePath,filename) exceptException: returnJsonResponse(data={'error':"系统异常"},status=400) returnJsonResponse(data={'filePath':allFimeNames})
request.FILES.getlist("file")此处的file是前端页面的文件提交的名称,可以在uploadify中配置。
文件下载:
@csrf_exempt @require_http_methods(["GET"]) defdownloadFile(request): filePath=request.GET.get("filepath") fileName=request.GET.get("filename") file_name=os.path.join(settings.UPLOADFILES_DIRS,filePath) ifos.path.exists(file_name): deffile_iterator(file_name,chunk_size=512): withopen(file_name)asf: whileTrue: c=f.read(chunk_size) ifc: yieldc else: break response=StreamingHttpResponse(file_iterator(file_name)) response['Content-Type']='application/octet-stream' response['Content-Disposition']='attachment;filename="{0}"'.format(fileName) returnresponse response=StreamingHttpResponse("文件不存在!") response['Content-Type']='application/octet-stream' response['Content-Disposition']='attachment;filename="{0}"'.format("") returnresponse
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。