HTTP-загрузки - это не просто двоичный файл, это кодирование в смешанной форме.Запишите request.vars.myfile на диск, и вы увидите, что он скажет что-то вроде
------------------BlahBlahBoundary
Content-Disposition: type="file"; name="myfile"
Content-Type: application/octet-stream
<binary data>
------------------BlahBlahBoundary--
Наивное решение для этого - использовать cgi.FieldStorage (), в примере, который я предоставляю, используется wsgi.input, который является частью mod_wsgi.
form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ)
raw_filw = cStringIO.StringIO(form['myfile'].file.read())
Здесь нужно отметить две вещи
Всегда используйте cStringIO, если он у вас есть, это будет быстрее, чемStringIO
Если вы разрешите загрузку таким образом, вы передадите файл в оперативную память, поэтому, как бы велик ни был файл, это то, сколько оперативной памяти вы будете использовать - это НЕ масштабируется,Мне пришлось написать свой собственный анализатор потока MIME для потоковой передачи файлов на диск через python, чтобы избежать этого.Но если вы учитесь или это доказательство концепции, у вас все будет хорошо.