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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。