1. 新建一个文件下载的模板(本文是基于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 οnclick="window.location.href='{% url 'course:download_file' %}'">Download</button>
</div>
</div
2. 编写相应的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
3. 配置相应的页面访问url:
<input type='button' class='download'>
$("body").on("click",".download",function(){ location.href="/downloadFile/?url="+路径;
});