我想为用户提供几个可供下载的文件。我试过这样,但Django试图打开这个网址:
http://10.0.3.186:8000/var/www/openvpn/examples/easy-rsa/2.0/keys/first_key.key
我改变了我的模板行:
<td width="100%" align = "right">
<a href="http://10.0.3.186:8000/sslcert/{{ file }}/key_download">
<font color = "white">  SSL-Key  </font>
</a>
</td>
我将以下行添加到我的网址
url(r'^(?P<username>\w+)/key_download$', views.key_download, name='key_download')
我的观点看起来像这样
from django.utils.encoding import smart_str
def key_download(request, username):
username_key = username + ".key"
response = HttpResponse(mimetype='application/force-download')
response['Content-Disposition'] = 'attachment; filename=%s' % smart_str(username_key)
response['X-Sendfile'] = smart_str("/var/www/openvpn/examples/easy-rsa/2.0/keys")
return response
文件正在下载,文件名是正确的,但目前它没有显示任何内容。
答案 0 :(得分:1)
答案 1 :(得分:0)
/var/www
不是网址。它是服务器上的文件路径。如果您希望用户访问该目录中的文件,您必须配置Apache(或其他)在特定地址提供服务,然后在模板而不是文件路径中使用该URL。
答案 2 :(得分:0)
我现在解决了这个问题。
def key_download(request, username):
username_key = username +".key"
fsock = open('/var/www/openvpn/examples/easy-rsa/2.0/keys/'+username_key, 'r')
response = HttpResponse(fsock, mimetype='application/pgp-keys')
response['Content-Disposition'] = "attachment; filename = %s " % (username_key)
return response
对于想要找出mimetype
>>> import urllib, mimetypes
>>> url = urllib.pathname2url(filename)
>>> print mimetypes.guess_type(url)