
Alex
25.03.2017
15:55:29

Igor
25.03.2017
15:58:40

Tony
25.03.2017
15:58:51

Igor
25.03.2017
15:59:29
вот видишь, с третьего раза ок

Google

Проксимов
25.03.2017
15:59:45
нет
Когда скомпилилось с 3 раза

Tony
25.03.2017
16:00:09
))

Артурий
25.03.2017
16:12:42
s
во народ пошёл, не здоровается

Dmitriy
25.03.2017
16:14:00
Ку

melancholiac
25.03.2017
16:17:06
@app.route('/download')
def download():
return send_from_directory(directory = '.',filename='test.txt',as_attachment=True)
почему скачиваемый файл урезается до 5 кб?

Igor
25.03.2017
16:17:50

Артурий
25.03.2017
16:18:16
Ку
прветствую, приветливый человек

melancholiac
25.03.2017
16:18:17
перехожу по http://127.0.0.1:5000/download

Артурий
25.03.2017
16:19:02
я на курсы давненько записался от Валерия Бовсуновского, кто-то слышал, может состоит в его секте ? (:

melancholiac
25.03.2017
16:19:27

Артурий
25.03.2017
16:25:15
стало быть никто
ок, если кто в теме-напишите в лс

Google

Igor
25.03.2017
16:25:25
можешь еще посмотреть заголовки, которые отправляются браузером при запросе /download
и заголовки, которые отправляются сервером в ответе

melancholiac
25.03.2017
16:27:41

Igor
25.03.2017
16:27:52
если отправляется только 5 кб, а не целиком файл, я б посмотрел, как работает код, который собственно этот файл читает
потом - хттп-заголовки в обе стороны
кстати, скока байт файл получается при скачивании? а сколько - в оригинале?

melancholiac
25.03.2017
16:29:51
du -h test.txt
1.1G test.txt
curl -Gi http://127.0.0.1:5000/download
HTTP/1.0 200 OK
Content-Disposition: attachment; filename=test.txt
Content-Length: 1073741824
Content-Type: text/plain; charset=utf-8
Last-Modified: Sat, 25 Mar 2017 16:09:55 GMT
Cache-Control: public, max-age=43200
Expires: Sun, 26 Mar 2017 04:30:19 GMT
ETag: "1490458195.553968-1073741824-568528516"
Date: Sat, 25 Mar 2017 16:30:19 GMT
Accept-Ranges: bytes
Server: Werkzeug/0.12.1 Python/3.6.0

Igor
25.03.2017
16:31:35
content-length нормальный, прикоооольно
а с -v сделай?
curl тоже 5 кб получает?


melancholiac
25.03.2017
16:32:32
curl -Giv http://127.0.0.1:5000/download
* Trying 127.0.0.1...
* TCP_NODELAY set
* Connected to 127.0.0.1 (127.0.0.1) port 5000 (#0)
> GET /download HTTP/1.1
> Host: 127.0.0.1:5000
> User-Agent: curl/7.53.1
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
HTTP/1.0 200 OK
< Content-Disposition: attachment; filename=test.txt
Content-Disposition: attachment; filename=test.txt
< Content-Length: 1073741824
Content-Length: 1073741824
< Content-Type: text/plain; charset=utf-8
Content-Type: text/plain; charset=utf-8
< Last-Modified: Sat, 25 Mar 2017 16:09:55 GMT
Last-Modified: Sat, 25 Mar 2017 16:09:55 GMT
< Cache-Control: public, max-age=43200
Cache-Control: public, max-age=43200
< Expires: Sun, 26 Mar 2017 04:32:20 GMT
Expires: Sun, 26 Mar 2017 04:32:20 GMT
< ETag: "1490458195.553968-1073741824-568528516"
ETag: "1490458195.553968-1073741824-568528516"
< Date: Sat, 25 Mar 2017 16:32:20 GMT
Date: Sat, 25 Mar 2017 16:32:20 GMT
< Accept-Ranges: bytes
Accept-Ranges: bytes
< Server: Werkzeug/0.12.1 Python/3.6.0
Server: Werkzeug/0.12.1 Python/3.6.0


Igor
25.03.2017
16:32:38
ну, то есть, не может же быть что все клиенты запрашивают range первых пяти килобайт, да? значит сервак че-т лошара
хм, а вон клиент запросил HTTP/1.1, а получил ответ в HTTP/1.0
че-т странно

melancholiac
25.03.2017
16:33:55

Igor
25.03.2017
16:35:28
ну, если глобально посудить, то ты через питон зачем-то просто пропихиваешь целиком обычный статичный текстовый файл

Google

melancholiac
25.03.2017
16:35:31
может дело в том что у меня в этом файле нули?

Igor
25.03.2017
16:35:39
нули в смысле NUL-байты?
\0?

melancholiac
25.03.2017
16:36:19
\0?
я создавал dd if=/dev/zero of=/path/to/my/file bs=1G

Igor
25.03.2017
16:37:09
ага, NULы
ваще хорошее предположение, но тогда наверное вообще бы никакого контента не ушло
потому что обычно строки обрезаются до первого нулбайта

melancholiac
25.03.2017
16:38:11
сейчас пару метров из urandom'а сгенерю

Igor
25.03.2017
16:38:24
давай. или lorem ipsum текстовый в пару станиц, чтоб уж наверняка
кстати, может там можно параметром выбрать режим, в котором надо открыть файл?

melancholiac
25.03.2017
16:39:11

Igor
25.03.2017
16:39:12
хотя с учетом того, что эта функция использовалась бы обычно для всяких картинок и пдфок, наверное, файл и так бинарно читается

Igor
25.03.2017
16:39:16
в send_from_directory

melancholiac
25.03.2017
16:39:23
1мб рандомный файл тоже 5кб приходит

Igor
25.03.2017
16:39:40
filename_or_fp - о, эти функции принимают файловый объект
а попробуй скормить так
send_from_directory(open('/path/to/file.dat', 'rb'))

melancholiac
25.03.2017
16:40:01

Igor
25.03.2017
16:40:18
wc -c /path/to/file.dat
откуда тогда предположение про 5кб

melancholiac
25.03.2017
16:41:45
wc -c test.txt
1048576 test.txt

Google

Igor
25.03.2017
16:42:40
че-т я запутался. это с dd if=/dev/urandom?

melancholiac
25.03.2017
16:42:48

Igor
25.03.2017
16:43:25

melancholiac
25.03.2017
16:43:36
тепер я поменял на
return send_from_directory(open('testq.txt', 'rb'))
такого файла в каталоге нет, должна быть ошибка, но мне до сиз пор приходит test.txt в 5кб

Igor
25.03.2017
16:43:55
а он сам пишет, что он reloading при сохранении исходников?

melancholiac
25.03.2017
16:44:06
* Detected change in '/home/melancholiac/yafr/yafr/main.py', reloading
* Restarting with stat
* Debugger is active!
* Debugger PIN: 186-584-341

Admin
ERROR: S client not available

melancholiac
25.03.2017
16:46:20
я видемо где-то не тут ошибся

Igor
25.03.2017
16:46:25
он в дебагмоде
а если ^C и потом find . | grep -E "(__pycache__|\.pyc$)" | xargs rm -rf (грохнуть все файлики с байткодом, юзаются для кеширования) и потом запустить снова и попрбовать еще раз?
еще лучше укажи абсолютный путь до файлов везде
а то мало ли
но вообще, ты изначально делаешь так, как на проде никто делать не будет :)
статику должен отдавать nginx или че-нибудь подобное. у тебя как раз статика.

melancholiac
25.03.2017
16:49:17

Igor
25.03.2017
16:49:28
прокси?

melancholiac
25.03.2017
16:49:30
я: чикчик и продекшен
нормальный человек: почитать как передаются файлы в сети

Google

Igor
25.03.2017
16:52:27
да ладно тебе.
просто если тебе очень надо именно через фласк/веркцойг попробовать, то можем дальше попробовать разобраться
но вообще да, вообще даже во фласке и джанге в документации пишут, что, мол, хоть у нас и runserver умеет отдавать статику и все такое прочее, но делается это неэффективно, поэтому пиздуйте поднимать нормальную архитектуру

melancholiac
25.03.2017
16:53:34

Igor
25.03.2017
16:54:12
будут, но через uwsgi
есть ли вероятность того, что у тебя несколько вьюх, ты их копипастил, и поменял путь в app.route(), но забыл переименовать саму функцию (def)?
а фласк и нгикс не будут работать вместе?
у digitalocean отличные статьи на многие подобные темы есть. вот для убунты 16.04, фласка, увсги и нгинкса. https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uwsgi-and-nginx-on-ubuntu-16-04

melancholiac
25.03.2017
16:55:51
спасибо за помощ большое

Igor
25.03.2017
16:56:30
можешь расставить print()ы на каждый чих (чуть ли не через каждую строчку), сразу понятнее должно стать
ну, естественно, чтобы они с разным содержимым были, чтобы было понятно, когда что запустилось :)

Даниил
25.03.2017
16:58:15
мб тогда дебаггер?

Igor
25.03.2017
16:58:52
мб тогда дебаггер?
как вариант :) я просто хз, что он использует, а в дебаггерах еще разбираться надо, если опыта нет
особенно в pdb обычном %)

Даниил
25.03.2017
16:59:22
PyCharm :)

melancholiac
25.03.2017
17:00:47
поменял / чтоб он возвращал "123" -> 123
поменял /download чтоб он возвращал "123" -> возвращает файл 5 кб
может дело в браузере?

Igor
25.03.2017
17:00:57
давай сюда исходник
может
пробуй курлом
Эта группа больше не существует