Django fichier télécharger vide
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!
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