Найти - Пользователи
Полная версия: Выгрузка/скачивание файла с сайта
Начало » Django » Выгрузка/скачивание файла с сайта
1
ex
Доброго времени суток.
Пытаюсь сделать сохранение файла пользователем
f = open('/tmp/current.log', 'r')
dt = File(f)
response = HttpResponse(dt.read(), mimetype='text/plain')
response['Content-Disposition'] = 'attachment; filename=system.log'
return response
Но отдается не весь фаел, скачивается, то 700 строк, то 70000.
Если делать так
filename = '/tmp/current.log'
wrapper = FileWrapper(file(filename))
response = HttpResponse(wrapper, content_type='text/plain')
response['Content-Disposition'] = 'attachment; filename=system.log'
response['Content-Length'] = os.path.getsize(filename)
return response
то сохраняется пустой фаел, а если убрать строку определяющую Content-Disposition, то выкачивается все, но в браузер.
ex
Забавно, работает второй вариант если не указывать Content-Length
Почему именно так не понятно =|
Александр Кошелев
Что такие File и FileWrapper? Зачем вы их используете?
ex
Daevaorn
Что такие File и FileWrapper? Зачем вы их используете?
FileWrapper
File

Затем что нашел их, а как делать по другому не знал :)
romankrv
А чем тебя не устраивает upload файлов через пост запрос в <form>
Зачем городить непонятные тебе враперы смысл которых тебе непонятен.
Попробуй проще сделать безвраперов
Александр Кошелев
romankrv
А чем тебя не устраивает upload файлов через пост запрос в <form>
Рома, ты вообще понял в чем вопрос или нет?
ziro
ex
Забавно, работает второй вариант если не указывать Content-Length
Почему именно так не понятно
Отчего же. ЕМНИП атачменты идут через urlencoding в обязательном порядке. Так что если у Вас в логе есть пробелы, символы возврата каретки или не ascii символы - то длина будет не той, что в файле на диске. Я обычно никогда руками не выставляю ‘Content-Length’, так как контейнер/фреймворк его сами могут расчитать, причем с учетом всех ньюансов.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB