Я пытаюсь получить простую форму для загрузки изображений в торнадо. все отлично работает с текстовыми файлами, данные поступают на сервер и записываются в файловую систему. однако, когда я пытаюсь загрузить двоичный файл (jpeg или png, в частности), он становится поврежденным. открытие результата загруженного PNG приводит к ошибке "PNG файл, поврежденный преобразованием ascii", а jpeg дает "jpeg datastream не содержит изображения". что я делаю неправильно?
питон:
class FileUploadHandler(BaseHandler):
def post(self):
reg=self.get_argument('regid', None)
self.write(dir(self.request.files['myfile'][0]))
if reg:
reg=Registration(id=reg)
f=open(ROOT_APP_PATH+'/static/clubfiles/{0}/{1}/{2}'\
.format(reg.club.id, reg.id, uuid()), 'w')
f.write(self.request.files['myfile'][0]['body'])
f.close()
HTML:
<form target=iframe
action="/do_file_upload/"
enctype="multipart/form-data; charset=utf-8"
method="post">
<input type=hidden name=regid value=${element.get_relevant_registration().id}>
<input name=myfile type=file onchange="$(this).parent().submit()">
</form>
сервер торнадо работает на сервере win 2008, если это имеет значение.
Изменить: черт возьми, просто исправить. Мне нужно было использовать open (filename, 'wb') для записи в двоичном режиме. надеюсь, это поможет кому-то, кто приземляется здесь из Google.