我有一个呈现上传文件列表的Django视图,用户可以点击它们开始下载。
项目部署完成后,我们发现浏览器打开了一个文件,而不是下载它。它似乎与.dxf扩展名有关。
这是链接的创建方式:
<a href="{{ MEDIA_URL }}{{ file.url }}" target="blank">...</a>
结果:
http://localhost:8003/media/folder/whatever.dxf
那么,为什么同一个浏览器的行为有所不同?如果我在localhost上运行它,那么它会下载该文件。但访问真实的服务器,它打开它。我可以阻止服务器在浏览器中打开它们吗?
答案 0 :(得分:0)
您可以尝试添加将处理下载的新Django视图。
<强> urls.py 强>
from django.conf.urls import url
import views
urlpatterns = [
url(r'^download/$', views.DownloadView.as_view(), name='download')
]
<强> views.py 强>
import urllib
from django.http import HttpResponse
from django.views.generic.base import View
class DownloadView(View):
def get(self, request):
location = request.GET.get('location')
file = urllib.urlretrieve(location)
contents = open(file[0], 'r')
content_type = '%s' % file[1].type
response = HttpResponse(contents, content_type=content_type)
response['Content-Disposition'] = 'attachment; filename="%s"' % location.split('/')[-1]
return response
<强> template.html 强>
<a href="/download/?location={{ MEDIA_URL }}{{ file.url }}">...</a>