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 logging类库使用例子
Nov 22 Python
Python编写登陆接口的方法
Jul 10 Python
Python3中条件控制、循环与函数的简易教程
Nov 21 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
Python使用matplotlib模块绘制图像并设置标题与坐标轴等信息示例
May 04 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
基于python 微信小程序之获取已存在模板消息列表
Aug 05 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
Sep 20 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
python 微信好友特征数据分析及可视化
Jan 07 Python
python实现简单的购物程序代码实例
Mar 03 Python
python实现简易名片管理系统
Apr 11 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
php注销代码(session注销)
2012/05/31 PHP
PHPMailer的主要功能特点和简单使用说明
2014/02/17 PHP
详解Laravel5.6 Passport实现Api接口认证
2018/07/27 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
使用JQuery和s3captche实现一个水果名字的验证
2009/08/14 Javascript
分享十五个最佳jQuery 幻灯插件和教程
2010/03/27 Javascript
网页打开自动最大化的js代码
2012/08/22 Javascript
jQuery旋转插件—rotate支持(ie/Firefox/SafariOpera/Chrome)
2013/01/16 Javascript
JS调用CS里的带参方法实例
2013/08/01 Javascript
正负小数点后两位浮点数实现原理及代码
2013/09/06 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
jQuery构造函数init参数分析续
2015/05/13 Javascript
基于Jquery和html5的7款个性化地图插件
2015/11/17 Javascript
jQuery中实现prop()函数控制多选框(全选,反选)
2016/08/19 Javascript
JSON与js对象序列化实例详解
2017/03/16 Javascript
Angular2使用Augury来调试Angular2程序
2017/05/21 Javascript
javascript实现二叉树的代码
2017/06/08 Javascript
ES6模块化的import和export用法方法总结
2017/08/08 Javascript
深入剖析Express cookie-parser中间件实现示例
2018/02/01 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
layui+jquery支持IE8的表格分页方法
2019/09/28 jQuery
Python线程创建和终止实例代码
2018/01/20 Python
深入了解和应用Python 装饰器 @decorator
2019/04/02 Python
python画双y轴图像的示例代码
2019/07/07 Python
超级实用的8个Python列表技巧
2020/08/24 Python
Python的logging模块基本用法
2020/12/24 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
泰国综合购物网站:Lazada泰国
2018/04/09 全球购物
Puccini乌克兰:购买行李箱、女士手袋网上商店
2020/08/06 全球购物
美术指导求职信
2014/03/17 职场文书
六查六看自查报告
2014/10/14 职场文书
2015年世界无车日活动总结
2015/03/23 职场文书
施工安全保证书
2015/05/09 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫