Question

Je suis en train d'écrire une fonction simple pour le téléchargement d'un certain fichier, à partir du serveur, à ma machine. Le fichier est unique représenté par son identifiant. Le fichier est locatd corectly, et le téléchargement est terminé, mais le fichier téléchargé (bien nommé comme celui sur le serveur) est vide.  ma fonction téléchargement ressemble à ceci:

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

Où puis-je tort? merci!

Était-ce utile?

La solution

Je répondu à cette question , espérons qu'il aide.

Autres conseils

On dirait que vous n'êtes pas d'envoyer des données (vous n'ouvrez même pas le fichier).

Django a un emballage bien pour envoyer des fichiers (code tiré de 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

vous pouvez donc utiliser quelque chose comme response = HttpResponse(FileWrapper(file(path_to_file)), mimetype='application/force-download').

Si vous utilisez vraiment lighttpd (à cause du X- " sendfile "en-tête ), vous devez vérifier le serveur et la configuration FastCGI, je suppose.

Essayez l'une de ces approches:

1) Désactiver GZipMiddleware si vous utilisez;

2) Appliquer un patch pour django / core / serveurs / basehttp.py décrits dans https://code.djangoproject.com/ticket/6027

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top