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的内存泄漏及gc模块的使用分析
Jul 16 Python
深入理解NumPy简明教程---数组1
Dec 17 Python
python学习教程之使用py2exe打包
Sep 24 Python
Python cookbook(数据结构与算法)将名称映射到序列元素中的方法
Mar 22 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
python 上下文管理器及自定义原理解析
Nov 19 Python
利用python实现逐步回归
Feb 24 Python
使用python3 实现插入数据到mysql
Mar 02 Python
详解基于Scrapy的IP代理池搭建
Sep 29 Python
Python从文件中读取数据的方法步骤
Nov 18 Python
pandas数值排序的实现实例
Jul 25 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 strcmp使用说明
2010/04/22 PHP
PHP使用redis消息队列发布微博的方法示例
2017/06/22 PHP
js控制input输入字符解析
2013/12/27 Javascript
jQuery中的$.ajax()方法应用
2014/05/06 Javascript
javascript框架设计之种子模块
2015/06/23 Javascript
jquery判断对象是否为空并遍历对象的简单实例
2016/07/26 Javascript
D3.js封装文本实现自动换行和旋转平移等功能
2016/10/14 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
Bootstrap Modal遮罩弹出层代码分享
2016/11/21 Javascript
从零开始学习Node.js系列教程四:多页面实现数学运算的client端和server端示例
2017/04/13 Javascript
layui选项卡效果实现代码
2017/05/19 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
仿iPhone通讯录制作小程序自定义选择组件的实现
2019/05/23 Javascript
JS代码触发事件代码实例
2020/01/02 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
js实现点击烟花特效
2020/10/14 Javascript
python2.7删除文件夹和删除文件代码实例
2013/12/18 Python
Python Tkinter GUI编程入门介绍
2015/03/10 Python
Python内置模块hashlib、hmac与uuid用法分析
2018/02/12 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
Python 存取npy格式数据实例
2020/07/01 Python
Python实现迪杰斯特拉算法过程解析
2020/09/18 Python
CSS3中Transform动画属性用法详解
2016/07/04 HTML / CSS
英国第一的购买便宜玩具和游戏的在线购物网站:Bargain Max
2018/01/24 全球购物
美国经典刺绣和字母儿童服装特卖:Smocked Auctions
2018/07/16 全球购物
仓库管理制度
2014/01/21 职场文书
幼儿园毕业教师感言
2014/02/21 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
村干部承诺书
2014/03/28 职场文书
2015年售票员工作总结
2015/04/29 职场文书
2016公司年会主持词
2015/07/01 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
如何用vue实现网页截图你知道吗
2021/11/17 Vue.js
利用Python多线程实现图片下载器
2022/03/25 Python
IDEA中sout快捷键无效问题的解决方法
2022/07/23 Java/Android