Django实现文件上传下载


Posted in Python onOctober 06, 2019

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

一、django实现文件下载

(1)、后台接口

如果从服务器直接将文件路径传给浏览器,普通文件可以直接下载,而图片,html,css和pdf格式等文件会直接显示,所以解决办法就是在头文件中让文件流写入硬盘.

①、最简单的文件下载功能的实现,直接将文件流放入HttpResponse对象即可

def file_download(request):
 # do something...
 with open('file_name.txt') as f:
  c = f.read()
 return HttpResponse(c)

这种方式简单粗暴,适合小文件的下载,但如果这个文件非常大,这种方式会占用大量的内存,甚至导致服务器崩溃

②、更合理的文件下载

Django的HttpResponse对象运行将迭代器作为传入参数,将上面代码中的传入参数c换成一个迭代器,便可以将上述下载功能优化为对大小文件均适合;而Django更进一步,推荐使用 StreamingHttpResponse对象取代HttpResponse对象,StreamingHttpResponse对象用于将文件流发送给浏览器,与HttpResponse对象非常相似,对于文件下载功能,使用StreamingHttpResponse对象更合理。因此,更加合理的文件下载功能,应该先写一个迭代器,用于处理文件,然后将这个迭代器作为参数传递给StreaminghttpResponse对象,如:

from django.http import StreamingHttpResponse
 
def big_file_download(request):
 # do something...
 
 def file_iterator(file_name, chunk_size=512):
  with open(file_name) as f:
   while True:
    c = f.read(chunk_size)
    if c:
     yield c
    else:
     break
 
 the_file_name = "file_name.txt"
 response = StreamingHttpResponse(file_iterator(the_file_name))
 
 return response

③、再次优化

上述的代码,已经完成了将服务器上的文件,通过文件流传输到浏览器,但文件流通常会以乱码形式显示到浏览器中,而非下载到硬盘上,因此,还要在做点优化,让文件流写入硬盘。优化很简单,给StreamingHttpResponse对象的Content-Type和Content-Disposition字段赋下面的值即可

from django.http import StreamingHttpResponse
 
def big_file_download(request):
 # do something...
 
 def file_iterator(file_name, chunk_size=512):
  with open(file_name) as f:
   while True:
    c = f.read(chunk_size)
    if c:
     yield c
    else:
     break
 
 the_file_name = "big_file.pdf"
 response = StreamingHttpResponse(file_iterator(the_file_name))
 response['Content-Type'] = 'application/octet-stream'
 response['Content-Disposition'] = 'attachment;filename="{0}"'.format(the_file_name)
 
 return response

(2)、前台展示

①、使用a标签直接访问到上面的视图函数配置好的url即可

②、使用button,或者其他标签

使用js触发点击事件,代码如下:

$("body").on("click",".buttonimgdown",function(){
 alert($(".hiddenshiyan").val());
 location.href="/downloadFile/?url=" rel="external nofollow" +$(".hiddenshiyan").val();
});

二 文件上传

(1)、前台表单,使用表单的方式进行文件的上传

<form enctype="multipart/form-data" action="./upload" method="post">
<p>File: <input type="file" name="file"></p>
<p><input type="submit" value="Upload"></p>
</form>

(2)、后台接收,这是接收图片的代码,其他文件类似

def addOnepicture(req):
rollpicturePath=os.path.join(basePath,rollpictureName)
reqfile = req.FILES['picfile']
img = Image.open(reqfile)
img.thumbnail((500,500),Image.ANTIALIAS)#对图片进行等比缩放
img.save(rollpicturePath,"png")#保存图片
T_Picture.objects.create(<u>...</u>)

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

Python 相关文章推荐
python简单读取大文件的方法
Jul 01 Python
Python测试网络连通性示例【基于ping】
Aug 03 Python
通过pycharm使用git的步骤(图文详解)
Jun 13 Python
在pycharm下设置自己的个性模版方法
Jul 15 Python
Python定时发送天气预报邮件代码实例
Sep 09 Python
pytorch自定义二值化网络层方式
Jan 07 Python
解决jupyter notebook打不开无反应 浏览器未启动的问题
Apr 10 Python
Python实现列表中非负数保留,负数转化为指定的数值方式
Jun 04 Python
Django框架请求生命周期实现原理
Nov 13 Python
Python实现Appium端口检测与释放的实现
Dec 31 Python
详解Python中__new__方法的作用
Mar 31 Python
python​格式化字符串
Apr 20 Python
python编写猜数字小游戏
Oct 06 #Python
python实现猜数字游戏
Mar 25 #Python
python实现机器人卡牌
Oct 06 #Python
Django实现文件上传下载功能
Oct 06 #Python
使用turtle绘制五角星、分形树
Oct 06 #Python
wxPython:python首选的GUI库实例分享
Oct 05 #Python
python使用pip安装模块出现ReadTimeoutError: HTTPSConnectionPool的解决方法
Oct 04 #Python
You might like
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
PHP实现加密的几种方式介绍
2015/02/22 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
浅谈Laravel POST,PUT,PATCH 路由的区别
2019/10/15 PHP
JQuery 获取和设置Select选项的代码
2010/02/07 Javascript
js检测浏览器版本、核心、是否移动端示例
2014/04/24 Javascript
noty ? jQuery通知插件全面解析
2016/05/18 Javascript
JavaScript事件用法浅析
2016/10/31 Javascript
jqGrid翻页时数据选中丢失问题的解决办法
2017/02/13 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
2017/02/14 Javascript
angular+bootstrap的双向数据绑定实例
2017/03/03 Javascript
win系统下nodejs环境安装配置
2017/05/04 NodeJs
微信小程序获取手机系统信息的方法【附源码下载】
2017/12/07 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
Javascript Symbol原理及使用方法解析
2020/10/22 Javascript
Python字符串的全排列算法实例详解
2019/01/07 Python
在python3中实现更新界面
2020/02/21 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
2020/05/25 Python
python将YUV420P文件转PNG图片格式的两种方法
2021/01/22 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
一款利用纯css3实现的超炫3D表单的实例教程
2014/12/01 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
车间副主任岗位职责
2013/12/24 职场文书
高中军训感言400字
2014/02/24 职场文书
项目建议书格式
2014/03/12 职场文书
法律进学校实施方案
2014/03/15 职场文书
如何撰写一封出色的求职信
2014/04/27 职场文书
求职简历自荐信
2014/06/18 职场文书
2014党委书记四风问题对照检查材料思想汇报
2014/09/22 职场文书
2015年社区综治工作总结
2015/04/21 职场文书
2015年建筑工作总结报告
2015/05/04 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
手把手教你用SpringBoot将文件打包成zip存放或导出
2021/06/11 Java/Android