Ich wollte den Benutzern mehrere Dateien zum Herunterladen zur Verfügung stellen. Ich habe es so versucht, aber Django versucht diese URL zu öffnen:

http://10.0.3.186:8000/var/www/openvpn/examples/easy-rsa/2.0/keys/first_key.key

Ich habe meine Vorlagenzeile folgendermaßen geändert:

<td width="100%" align = "right">
 <a href="http://10.0.3.186:8000/sslcert/{{ file }}/key_download">
  <font color = "white">&nbsp&nbspSSL-Key&nbsp&nbsp</font>
 </a>
</td>

Ich habe meinen URLs die folgende Zeile hinzugefügt

url(r'^(?P<username>\w+)/key_download$', views.key_download, name='key_download')

Meine Ansichten sehen so aus

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

Die Datei wird heruntergeladen und der Dateiname ist der richtige, ABER es werden momentan keine Inhalte angezeigt.

0
BoJack Horseman 28 Nov. 2013 im 12:08

3 Antworten

Beste Antwort

Ich habe das Problem jetzt gelöst.

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

Ein cooler Tipp für die Jungs, die das mimetype herausfinden möchten

>>> import urllib, mimetypes
>>> url = urllib.pathname2url(filename)
>>> print mimetypes.guess_type(url)
0
BoJack Horseman 4 Dez. 2015 im 09:05

Sie müssen auch das HTTP header der Antwort auf etwas wie application/force-download setzen. Weitere Informationen finden Sie unter docs.

Siehe auch diese Frage.

1
Community 23 Mai 2017 im 11:52

/var/www ist keine URL. Es ist ein Dateipfad auf Ihrem Server. Wenn Benutzer auf eine Datei in diesem Verzeichnis zugreifen sollen, müssen Sie Apache (oder was auch immer) so konfigurieren, dass sie an einer bestimmten Adresse bereitgestellt wird, und diese URL dann in Ihrer Vorlage anstelle des Dateipfads verwenden.

0
Daniel Roseman 28 Nov. 2013 im 09:33