Django实现文件上传和下载功能


Posted in Python onOctober 06, 2019

本文实例为大家分享了Django下完成文件上传和下载功能的具体代码,供大家参考,具体内容如下

一、文件上传

Views.py

def upload(request):
 if request.method == "POST": # 请求方法为POST时,进行处理
 myFile = request.FILES.get("myfile", None) # 获取上传的文件,如果没有文件,则默认为None
 if not myFile:
 return HttpResponse("no files for upload!")
 # destination=open(os.path.join('upload',myFile.name),'wb+')
 destination = open(
 os.path.join("你的文件存放地址", myFile.name),
 'wb+') # 打开特定的文件进行二进制的写操作
 for chunk in myFile.chunks(): # 分块写入文件
 destination.write(chunk)
 destination.close()
 return HttpResponse("upload over!")
 else:
 file_list = []
 files = os.listdir('D:\python\Salary management system\django\managementsystem\\file')
 for i in files:
 file_list.append(i)
 return render(request, 'upload.html', {'file_list': file_list})

urls.py

url(r'download/$',views.download),

upload.html

<div class="container-fluid">
 <div class="row">
 <form enctype="multipart/form-data" action="/upload_file/" method="POST">
 <input type="file" name="myfile"/>
 <br/>
 <input type="submit" value="upload"/>
 </form>
 </div>
</div>

 页面显示

 Django实现文件上传和下载功能

二、文件下载

Views.py

from django.http import HttpResponse,StreamingHttpResponse
from django.conf import settings
 
def download(request):
 filename = request.GET.get('file')
 filepath = os.path.join(settings.MEDIA_ROOT, filename)
 fp = open(filepath, 'rb')
 response = StreamingHttpResponse(fp)
 # response = FileResponse(fp)
 response['Content-Type'] = 'application/octet-stream'
 response['Content-Disposition'] = 'attachment;filename="%s"' % filename
 return response
 fp.close()

HttpResponse会直接使用迭代器对象,将迭代器对象的内容存储城字符串,然后返回给客户端,同时释放内存。可以当文件变大看出这是一个非常耗费时间和内存的过程。

而StreamingHttpResponse是将文件内容进行流式传输,StreamingHttpResponse在官方文档的解释是:

The StreamingHttpResponse class is used to stream a response from Django to the browser. You might want to do this if generating the response takes too long or uses too much memory.

这是一种非常省时省内存的方法。但是因为StreamingHttpResponse的文件传输过程持续在整个response的过程中,所以这有可能会降低服务器的性能。

urls.py

url(r'^upload',views.upload),

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

Python 相关文章推荐
python的dict,set,list,tuple应用详解
Jul 24 Python
python网络编程之读取网站根目录实例
Sep 30 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
Python2.x版本中基本的中文编码问题解决
Oct 12 Python
python爬虫headers设置后无效的解决方法
Oct 21 Python
目前最全的python的就业方向
Jun 05 Python
Python API 自动化实战详解(纯代码)
Jun 11 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
Feb 20 Python
Django调用百度AI接口实现人脸注册登录代码实例
Apr 23 Python
python+requests接口自动化框架的实现
Aug 31 Python
python实现过滤敏感词
May 08 Python
Django文件上传与下载(FileFlid)
Oct 06 #Python
Django实现文件上传下载
Oct 06 #Python
python编写猜数字小游戏
Oct 06 #Python
python实现猜数字游戏
Mar 25 #Python
python实现机器人卡牌
Oct 06 #Python
Django实现文件上传下载功能
Oct 06 #Python
使用turtle绘制五角星、分形树
Oct 06 #Python
You might like
PHP获取当前页面完整URL的实现代码
2013/06/10 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
跟我学Node.js(四)---Node.js的模块载入方式与机制
2014/06/04 Javascript
jquery制作漂亮的弹出层提示消息特效
2014/12/23 Javascript
jQuery中:hidden选择器用法实例
2014/12/30 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
JS验证字符串功能
2017/02/22 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
vue.js element-ui tree树形控件改iview的方法
2018/03/29 Javascript
js实现跟随鼠标移动的小球
2019/08/26 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
vue 使用微信jssdk,调用微信相册上传图片功能
2020/11/13 Javascript
[04:15]DOTA2-DPC中国联赛1月19日Recap集锦
2021/03/11 DOTA
Python入门_条件控制(详解)
2017/05/16 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
Python实现控制台中的进度条功能代码
2017/12/22 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
Python微医挂号网医生数据抓取
2019/01/24 Python
Python实现操纵控制windows注册表的方法分析
2019/05/24 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
基于CSS3制作立体效果导航菜单
2016/01/12 HTML / CSS
财务会计实习报告体会
2013/12/20 职场文书
单位消防安全制度
2014/01/12 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
爱国卫生月实施方案
2014/02/21 职场文书
餐饮投资计划书
2014/04/25 职场文书
跑操口号
2014/06/12 职场文书
计划生育宣传标语
2014/06/21 职场文书
2015年党员自我剖析材料
2014/12/17 职场文书
爱的教育读书笔记
2015/06/26 职场文书
2016年国培心得体会及反思
2016/01/13 职场文书
学校2016年九九重阳节活动总结
2016/04/01 职场文书
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL
Python 第三方库 openpyxl 的安装过程
2022/12/24 Python