Django Download-Datei leer
Frage
Ich schreibe eine einfache Funktion für eine bestimmte Datei herunterzuladen, von dem Server, auf meinen Rechner. Die Datei ist einzigartig durch seine ID vertreten. Die Datei wird Villa zentral corectly, und der Download fertig ist, aber die heruntergeladene Datei (obwohl wie die auf dem Server namens) leer ist. meine Download-Funktion sieht wie folgt aus:
def download_course(request, id):
course = Courses.objects.get(pk = id).course
path_to_file = 'root/cFolder'
filename = __file__ # Select your file here.
wrapper = FileWrapper(file(filename))
content_type = mimetypes.guess_type(filename)[0]
response = HttpResponse(wrapper, content_type = content_type)
response['Content-Length'] = os.path.getsize(filename)
response['Content-Disposition'] = 'attachment; filename=%s/' % smart_str(course)
return response
Wo kann ich falsch sein? Dank!
Andere Tipps
Sieht aus wie Sie gar keine Daten gesendet werden (Sie auch die Datei nicht öffnen).
hat Django einen schönen Wrapper für das Senden von Dateien (Code genommen von djangosnippets.org ):
def send_file(request):
"""
Send a file through Django without loading the whole file into
memory at once. The FileWrapper will turn the file object into an
iterator for chunks of 8KB.
"""
filename = __file__ # Select your file here.
wrapper = FileWrapper(file(filename))
response = HttpResponse(wrapper, content_type='text/plain')
response['Content-Length'] = os.path.getsize(filename)
return response
, so dass Sie so etwas wie response = HttpResponse(FileWrapper(file(path_to_file)), mimetype='application/force-download')
nutzen könnten.
Wenn Sie wirklich verwenden lighttpd (wegen der "X- sendfile " Header), sollten Sie den Server und FastCGI-Konfiguration überprüfen, schätze ich.
Versuchen Sie eine dieser Ansätze:
1) Disable GZipMiddleware wenn Sie es verwenden;
2) Wenden Sie einen Patch django / core / Server / basehttp.py beschrieben in https://code.djangoproject.com/ticket/6027