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获取赶集网招聘信息前篇
Apr 18 Python
Python脚本实时处理log文件的方法
Nov 21 Python
python使用opencv进行人脸识别
Apr 07 Python
详谈Python高阶函数与函数装饰器(推荐)
Sep 30 Python
简单了解Python中的几种函数
Nov 03 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
python urllib爬虫模块使用解析
Sep 05 Python
Python numpy线性代数用法实例解析
Nov 15 Python
Python创建一个元素都为0的列表实例
Nov 28 Python
python3.8与pyinstaller冲突问题的快速解决方法
Jan 16 Python
OpenCV图片漫画效果的实现示例
Aug 18 Python
Python 匹配文本并在其上一行追加文本
May 11 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
php5.3 废弃函数小结
2010/05/16 PHP
php牛逼的面试题分享
2013/01/18 PHP
php操作xml入门之cdata区段
2015/01/23 PHP
半角全角相互转换的js函数
2009/10/16 Javascript
JQuery文本框高亮显示插件代码
2011/04/02 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
javascript 回调函数详解
2014/11/11 Javascript
JS基于Mootools实现的个性菜单效果代码
2015/10/21 Javascript
详解基于Bootstrap扁平化的后台框架Ace
2015/11/27 Javascript
javascript中不易分清的slice,splice和split三个函数
2016/03/29 Javascript
vue中计算属性(computed)、methods和watched之间的区别
2017/07/27 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
JS手机端touch事件计算滑动距离的方法示例
2017/10/26 Javascript
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
2018/11/21 Javascript
vue-router 起步步骤详解
2019/03/26 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
es6中reduce的基本使用方法
2019/09/10 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
详解python上传文件和字符到PHP服务器
2017/11/24 Python
python如何为创建大量实例节省内存
2018/03/20 Python
对Python3.6 IDLE常用快捷键介绍
2018/07/16 Python
pycharm 将python文件打包为exe格式的方法
2019/01/16 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
如何在Python对Excel进行读取
2020/06/04 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
2020/10/20 Python
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
英国索普公园票务和酒店套餐:Thorpe Breaks
2019/09/14 全球购物
电子商务专员岗位职责
2013/12/11 职场文书
项目申请汇报材料
2014/08/16 职场文书
村主任群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
数学教师求职信范文
2015/03/20 职场文书
唐山大地震的观后感
2015/06/05 职场文书
三好学生主要事迹怎么写
2015/11/03 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
用Python爬取各大高校并可视化帮弟弟选大学,弟弟直呼牛X
2021/06/11 Python