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读写excel的方法
Nov 18 Python
Python实现简单的可逆加密程序实例
Mar 05 Python
在Python中使用pngquant压缩png图片的教程
Apr 09 Python
python3设计模式之简单工厂模式
Oct 17 Python
Python爬虫中urllib库的进阶学习
Jan 05 Python
Django中url的反向查询的方法
Mar 14 Python
python format 格式化输出方法
Jul 16 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
python中的TCP(传输控制协议)用法实例分析
Nov 15 Python
python中加背景音乐如何操作
Jul 19 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
一篇文章搞懂python混乱的切换操作与优雅的推导式
Aug 23 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
Codeigniter框架实现获取分页数据和总条数的方法
2014/12/05 PHP
Thinkphp关闭缓存的方法
2015/06/26 PHP
PHP mysqli事务操作常用方法分析
2017/07/22 PHP
详解php语言最牛掰的Laravel框架
2017/11/20 PHP
二级域名或跨域共享Cookies的实现方法
2008/08/07 Javascript
jQuery+JSON+jPlayer实现QQ空间音乐查询功能示例
2013/06/17 Javascript
javascript中的事件代理初探
2014/03/08 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解
2016/05/12 Javascript
AngularJS表格详解及示例代码
2016/08/17 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
2016/11/10 Javascript
为JQuery EasyUI 表单组件增加焦点切换功能的方法
2017/04/13 jQuery
linux 后台运行node服务指令方法
2018/05/23 Javascript
Vue 监听列表item渲染事件方法
2018/09/06 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
jQuery单页面文字搜索插件jquery.fullsearch.js的使用方法
2020/02/04 jQuery
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
jQuery实现简单全选框
2020/09/13 jQuery
Python将图片批量从png格式转换至WebP格式
2020/08/22 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python线程定时器Timer实现原理解析
2019/11/30 Python
Python使用enumerate获取迭代元素下标
2020/02/03 Python
pip安装tensorflow的坑的解决
2020/04/19 Python
pycharm远程连接vagrant虚拟机中mariadb数据库
2020/06/05 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
儿科护士自我鉴定
2013/10/14 职场文书
物业管理员岗位职责范文
2013/11/25 职场文书
财务主管自我鉴定
2014/01/17 职场文书
2015年植树节活动总结
2015/02/06 职场文书
安全伴我行主题班会
2015/08/13 职场文书
小学2016年第十八届推普周活动总结
2016/04/05 职场文书
SpringBoot项目中控制台日志的保存配置操作
2021/06/18 Java/Android
Logback 使用TurboFilter实现日志级别等内容的动态修改操作
2021/08/30 Java/Android