Django下载文件

继上文的上传后,终于到了下载模块,因为只是简单实现,所以就不存在那么多复杂的流程了,也没有自己定义模板什么的,之前一直纠结于怎么实现自动弹窗让你选择文件存储路径,后来才了解到那是根据浏览器支持情况而定,一直纠结于后台实现,因为之前的python代码块包括阿里云sdk里的支持都是要先定义好路径和文件名然后直接下载的,话不多说,上代码
表单
【Django下载文件】属性设置基本和前文一样,我在html里面的audio标签里面添加了id属性,其实必要性也不大,不过可以增加代码可读性嘛,跟这里的下载操作关联不大我就没有嵌代码了,因为我的音乐播放器是js实现的,所以这里用requests库获取到当前audio里面的src属性值即可,主要就是获取到src值供后端操作
{% csrf_token %}

views.py
无关操作就隐去了,主要就是打开要下载的文件,我是从src获取到文件名从而获取到文件对象,此处设计爬虫与oss的相关细节不做赘述,反正就是读取待下载文件,然后设定一些响应属性,filename那里可以指定默认文件名,返回响应即可,百度应该会给出基本的三大类型的django文件下载方式,这种是最推荐的,支持大小文件而且避免了缓存等问题的异常,大家可以去尝试一下
def download_file(request): referer = request.META.get('HTTP_REFERER', reverse('home')) #url = "http://127.0.0.1:8000/" #html = getHTMLText(url) #src = https://www.it610.com/article/get_data(html) #file_name = unquote(src,'utf-8').split('com/')[1] #os.chdir(‘../static/cloud’) #bucket.get_object_to_file(file_name, file_name)file = open(file_name, 'rb') response = FileResponse(file) response['Content-Type'] = 'application/octet-stream' response['Content-Disposition'] = 'attachment; filename="example.tar.gz"' return response #return redirect(request.GET.get('from', reverse('home')))

    推荐阅读