Django скачать файл пустой - PullRequest
2 голосов
/ 29 июня 2010

Я пишу простую функцию для загрузки определенного файла с сервера на мою машину.Файл уникален, представлен его идентификатором.Файл размещен в основном, и загрузка завершена, но загруженный файл (хотя и названный таковым на сервере) пуст.моя функция загрузки выглядит так:

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

где я могу ошибаться?спасибо!

Ответы [ 3 ]

2 голосов
/ 09 июля 2010

Я ответил на этот вопрос здесь , надеюсь, это поможет.

2 голосов
/ 29 июня 2010

Похоже, вы не отправляете никаких данных (вы даже не открываете файл).

У Django есть хорошая оболочка для отправки файлов (код взят из 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

, чтобы вы могли использовать что-то вроде response = HttpResponse(FileWrapper(file(path_to_file)), mimetype='application/force-download').

Если вы действительно используете lighttpd (из-за заголовка "X-Sendfile" ), вы должны проверить сервер и конфигурацию FastCGI, я думаю.

1 голос
/ 18 марта 2012

Попробуйте один из следующих подходов:

1) Отключите GZipMiddleware, если вы его используете;

2) Применить патч к django / core / servers / basehttp.py, описанному в https://code.djangoproject.com/ticket/6027

...