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!

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top