descarga de archivos Django vacía
Pregunta
Estoy escribiendo una función simple para la descarga de un archivo determinado, desde el servidor, a mi máquina. El archivo es único representado por su id. El archivo se locatd corectly, y la descarga se realiza, pero el archivo descargado (aunque nombrado como el que está en el servidor) está vacía. mis función de descarga es similar al siguiente:
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
¿Dónde puedo estar equivocado? gracias!
Solución
aquí , espero que ayude.
Otros consejos
Parece que no están enviando los datos (que ni siquiera abrir el archivo).
Django tiene un bonito envoltorio para envío de archivos (código tomado 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
por lo que podría utilizar algo como response = HttpResponse(FileWrapper(file(path_to_file)), mimetype='application/force-download')
.
Si está realmente usando lighttpd (a causa de los ejes X " sendfile " cabecera), se debe comprobar el servidor y la configuración de FastCGI, supongo.
Pruebe uno de estos enfoques:
1) Desactivar GZipMiddleware si lo está utilizando;
2) Aplicar un parche para django / core / servidores / basehttp.py describen en https://code.djangoproject.com/ticket/6027