Django Dienen einer Download-Datei
Ich versuche, die dazu dienen, eine txt-Datei generiert, die mit einigen Inhalten und ich habe einige Probleme. Ich'vecreated die temp-Dateien geschrieben und die Inhalte mit NamedTemporaryFile und setzen Sie einfach löschen, um falsch zu Debuggen, aber die heruntergeladene Datei nicht enthalten nichts.
Meine Vermutung ist, dass die response-Werte sind nicht spitz auf die richtige Datei, hense nichts heruntergeladen wird, heres mein code:
f = NamedTemporaryFile()
f.write(p.body)
response = HttpResponse(FileWrapper(f), mimetype='application/force-download')
response['Content-Disposition'] = 'attachment; filename=test-%s.txt' % p.uuid
response['X-Sendfile'] = f.name
Vergessen Sie nicht, Spülen Sie die Datei: f.flush, bevor irgendetwas anderes.
Für mehr details über die Bereitstellung von Dateien mit Django finden Sie unter: stackoverflow.com/q/1156246/462865
Für mehr details über die Bereitstellung von Dateien mit Django finden Sie unter: stackoverflow.com/q/1156246/462865
InformationsquelleAutor Callum | 2013-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie in Betracht gezogen, nur das senden
p.body
durch dieresponse
wie diese:InformationsquelleAutor Ric
XSend benötigt den Pfad zu der Datei, in
response['X-Sendfile']
So, können Sie tun,
Hier
path_to_file
ist der vollständige Pfad zu der Datei (nicht nur der name der Datei)Kasse diesem django-snippet
Es muss der vollständige Pfad, nicht nur die
f.name
- es sei denn, Sie speichern den absoluten Pfad inf.name
?NamedTemporaryFile schafft absolute Pfade
InformationsquelleAutor karthikr
Kann es mehrere Probleme mit Ihrem Ansatz:
f.flush()
wie bereits im Kommentar obenNamedTemporaryFile
gelöscht wird, auf das schließen, was könnte nur passieren, wenn Sie verlassen Ihre Funktion, so dass der webserver keine chance hat, um ihn abzuholenX-Sendfile
Vielleicht wäre es besser, StreamingHttpResponse statt temporäre Dateien anlegen und
X-Sendfile
...InformationsquelleAutor Michal Čihař
InformationsquelleAutor Saurabh Chandra Patel