benutzerdefinierte HTTP-Header für statische Dateien mit Django
Schreibe ich ein image bank mit Django, und ich möchte hinzufügen-button, um eine hi-res version des Bildes (die low-res angezeigt wird in der details-Seite). Wenn ich nur ein <a>
link, öffnet der browser das Bild, anstatt es herunterladen. Hinzufügen eines HTTP-header wie:
Content-Disposition: attachment; filename="beach008.jpg"
funktioniert, aber da es sich um eine statische Datei, die ich nicht wollen, um die Anfrage mit Django. Derzeit bin ich mit NGINX zu dienen statische Dateien und dynamischen Seiten werden umgeleitet via FastCGI an den Django-Prozess. Ich denke über die Verwendung von NGINX add-header
Befehl, aber könnte es den filename="xx"
Teil?. Oder vielleicht gibt es einen Weg, die Anforderung zu verarbeiten, die in Django, aber stellen NGINX dienen die Inhalte?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie Ihre django-app per Proxyfunktion von nginx können Sie x-accell-redirect. Sie übergeben müssen spezielle header in der Antwort, nginx wird intercepet diese und serviert Sie die Datei, Sie können auch pass-Content-Disposition-in der gleichen Reaktion zu zwingen, eine download.
Diese Lösung ist gut, wenn Sie wollen, um zu Steuern, welche Benutzer Zugriff dieser Dateien.
Können Sie auch eine Konfiguration zu verwenden, wie diese:
Diese zwingen wird, laden Sie alle Bilder in einigen high_res-Ordner (MEDIAROOT/high_rest). Und für die anderen statischen Dateien Verhalten sich wie normale. Bitte beachten Sie, dass dies eine modifizierte quick-hack, der für mich funktioniert. Es kann zu Sicherheitsrisiken führen, so verwenden Sie es mit Vorsicht.
Schrieb ich eine einfache Dekorateur, für django.Blick.statisch.dienen anzeigen
Das funktioniert für mich perfekt.
Auch spielen kann man mit nginx mime-Typen
http://wiki.codemongers.com/NginxHttpCoreModule#types
Diese Lösung funktionierte nicht für mich, denn ich wollte Sie haben beide direkten link für die Datei (so kann der Benutzer die Bilder ansehen, zum Beispiel), und download-link.
Was ich jetzt mache ist, verwenden Sie eine andere URL für den download als für 'Ansichten', und fügen Sie den Dateinamen als URL arg:
üblichen Medien link:
http://xx.com/media/images/lores/f_123123.jpg
download-link:
http://xx.com/downs/hires/f_12323?beach008.jpg
und nginx hat eine Konfiguration wie diese:
aber ich weiß wirklich nicht wie der Geruch.