在Django中实现文件下载功能的方法有很多,我们可以根据项目的具体情况来选择适合自己应用场景的方法。
实现方法可以参考以下的几篇文章中的方法:
Django实现文件下载的几种方法: http://blog.csdn.net/martin_liang/article/details/43286539
Django大文件的下载:http://www.tuicool.com/articles/bUnMfu
Django实现下载文件功能:http://www.jianshu.com/p/2ce715671340
新建一个文件下载的模板(本文是基于bootstrap的模板):
<div class="row">
<div class="col-md-8 col-md-offset-2">
<br>
<P>第一种方法,直接把链接地址指向要下载的静态文件,在页面中点击该链接,可以直接打开该文件,在链接上点击右键,选择“另存为”可以保存该文件到本地硬盘。
此方法只能实现静态文件的下载,不能实现动态文件的下载。</P>
<a href="{% url 'media' 'uploads/11.png' %}">11.png</a>
<br>
<br>
<p>第二种方法,将链接指向相应的view函数,在view函数中实现下载功能,可以实现静态和动态文件的下载。</p>
<a href="{% url 'course:download_file' %}">11.png</a>
<br>
<br>
<br>
<p>第三种方法,与第二种方法类似,利用按钮的响应函数实现文件下载功能。</p>
<label> 11.png</label><button onclick="window.location.href='{% url 'course:download_file' %}'">Download</button>
</div>
</div>
编写相应的view函数:
def download_file(request):
# do something
the_file_name='11.png' #显示在弹出对话框中的默认的下载文件名
filename='media/uploads/11.png' #要下载的文件路径
response=StreamingHttpResponse(readFile(filename))
response['Content-Type']='application/octet-stream'
response['Content-Disposition']='attachment;filename="{0}"'.format(the_file_name)
return response
def readFile(filename,chunk_size=512):
with open(filename,'rb') as f:
while True:
c=f.read(chunk_size)
if c:
yield c
else:
break
配置相应的页面访问url即可。
前台使用函数方法
②、button标签调用jq方法调用后台函数
<input type='button' class='download'>
$("body").on("click",".download",function(){ location.href="/downloadFile/?url="+路径;
});