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实现带错误处理功能的远程文件读取方法
Apr 29 Python
python的else子句使用指南
Feb 27 Python
python中函数默认值使用注意点详解
Jun 01 Python
Python利用IPython提高开发效率
Aug 10 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
django js实现部分页面刷新的示例代码
May 28 Python
详解利用django中间件django.middleware.csrf.CsrfViewMiddleware防止csrf攻击
Oct 09 Python
Python使用Pandas库常见操作详解
Jan 16 Python
python 爬取B站原视频的实例代码
Sep 09 Python
Python Pillow(PIL)库的用法详解
Sep 19 Python
python实现监听键盘
Apr 26 Python
Python使用Opencv打开笔记本电脑摄像头报错解问题及解决
Jun 21 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
phpmyadmin的#1251问题
2006/11/25 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
基于逻辑运算的简单权限系统(实现) JS 版
2007/03/24 Javascript
js工具方法弹出蒙版
2013/05/08 Javascript
深入理解javaScript中的事件驱动
2013/05/21 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
js动态拼接正则表达式的两种方法
2014/03/04 Javascript
js如何判断用户是否是用微信浏览器
2014/06/05 Javascript
JS长整型精度问题实例分析
2015/01/13 Javascript
jquery中live()方法和bind()方法区别分析
2016/06/23 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
jQuery中的一些小技巧
2017/01/18 Javascript
了解VUE的render函数的使用
2017/06/08 Javascript
了解ESlint和其相关操作小结
2018/05/21 Javascript
Javascript之高级数组API的使用实例
2019/03/08 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
详解Vue之事件处理
2020/07/10 Javascript
浅谈vue中$event理解和框架中在包含默认值外传参
2020/08/07 Javascript
JS+CSS实现过渡特效
2021/01/02 Javascript
详解用python实现基本的学生管理系统(文件存储版)(python3)
2019/04/25 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
Python面向对象之Web静态服务器
2019/09/03 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
keras读取h5文件load_weights、load代码操作
2020/06/12 Python
HTML5标签使用方法详解
2015/11/27 HTML / CSS
eBay加拿大站:eBay.ca
2019/06/20 全球购物
三年级数学教学反思
2014/01/31 职场文书
感恩父母的演讲稿
2014/05/06 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
个性发展自我评价2015
2015/03/09 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python