Уведомления

Группа в Telegram: @pythonsu

#1 Март 25, 2013 12:46:41

keder
Зарегистрирован: 2012-11-18
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

wsgi загрузка файлов

Доброго времени суток. Решил организовать загрузку файлов на сервер из вебформы на сайте (javascript) методом POST и прием соответственно осуществляется python скриптом (скрипт запускает wsgi). Обычно при приеме данных из формы все проходит хорошо - через environ получаю всю строку запроса, парсю, записываю в файл. При отправке текстового файла все передается без проблем.
Вот тело POST для текстового файла:

 -----------------------------622549980897071543746160662
Content-Disposition: form-data; name="file"; filename="Poetry"
Content-Type: application/octet-stream

By the old Moulmein Pagoda, lookin' eastward to the sea,
There's a Burma girl a-settin', and I know she thinks o' me;
For the wind is in the palm-trees, and the temple-bells they say:
"Come you back, you British soldier; come you back to Mandalay!"

-----------------------------622549980897071543746160662--

Однако при отправке нетекстового файла запрос постоянно обрывается на 4 байте файла.
Вот запрос при передаче нетекстового файла:
-----------------------------18187035351593489797106346514
Content-Disposition: form-data; name="file"; filename="35d5dd3709883208f4f61bfa8121b00d.jpg"
Content-Type: image/jpeg

ЪьЪЮ

Пробовал использовать cgi.FieldStorage. Но тут какието чудеса. Вывожу fields.getlist(“file”) (fields экземпляр cgi.FieldStorage) получаю список из одной строки:
['\xff\xd8\xff\xe0\x00\x10JFIF\x00\x01\x01\x01\x00H\x00H\x00...(пропущено)...\x8f?\xff\xd9']
Что уже похоже на передаваемый файл.
Однако если сделать:
file.write(fields.getlist("file")[0])
то запишется только “ЪьЪЮ”
Возникло подозрение что питон обрезает строку до первого символа \x00, но ответа почему так и как с этим бороться я так и не нашел.

Офлайн

#2 Март 25, 2013 16:18:41

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

wsgi загрузка файлов

enctype="multipart/form-data"
в теге form часом не забыли?

в файл в wb режиме пишете?

вообще http://code.activestate.com/recipes/273844-minimal-http-upload-cgi/

Отредактировано slav0nic (Март 25, 2013 16:20:44)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version