Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

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

У 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) отключить gzipmiddleware, если вы его используете;

2) Примените патч в Django / Core / Servers / basehttp.py, описанный вhttps://code.djangoproject.com/ticket/6027.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top