Форум сайта python.su
поставил Apache + mod_wsgi, разбираюсь как писать на Питоне под web. Покопался в коде стандартного модуля cgi. Появились вопросы.
В какой момент запускается питон-программа при upload-е файлов?
1. после загрузки всех файлов на сервер
2. после получения http-заголовков, но до того, как загрузится тело запроса
Тело запроса доступно через переменную окружения ‘wsgi.input’, которая ведет себя как файл.
В коде cgi данные читают из ‘wsgi.input’ порциями fp.readline(maxsize) и порциями записывают на диск в tempfile. В интернете пишут, что чтение порциями сделано в целях предотвращения DoS атаки, - если в теле http-запроса подсунут много мегабайт - environ.read() скушает всю память.
Однако, в таком коде:
form = cgi.FieldStorage()
f = form['uploaded_file'].value
def __getattr__(self, name):
if name != 'value':
raise AttributeError, name
if self.file:
self.file.seek(0)
value = self.file.read()
self.file.seek(0)
elif self.list is not None:
value = self.list
else:
value = None
return value
Офлайн
если вам ближе php - зачем вам мучаться с этим чёртовым питоном?)
вообще от cgi вы много хотите, да и это старо как мир;)
первое решение от гугла на базе генератора http://webpython.codepoint.net/cgi_big_file_upload (как видно из кода работают с form.file, а не с value)
“ограничение POST-данных” - это “проблемы” сервера.
Офлайн
slav0nicПосле знакомства с Питоном на PHP писать стало противно :)
если вам ближе php - зачем вам мучаться с этим чёртовым питоном?)
slav0nicможет быть, но библиотеку везде используют - в том же Джанго gjango/http/multipartparser.py первая строка import cgi, в библиотеке webob, которую использует Google App Engine тоже import cgi :)
вообще от cgi вы много хотите, да и это старо как мир
Офлайн