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!

War es hilfreich?

Lösung

, antwortete ich diese Frage hier , hoffe, es hilft.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top