Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2011 21:15:00

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

как декодировать bytearray, содержащий бинарный файл?

такая задача - отправить пост-запрос на сервер, чтобы загрузить туда картинку

нашел страшненькое решение на питоне, где все хидеры генерятся вручную

там есть такой код:

        
# Add the files to upload
parts.extend(
[ part_boundary,
'Content-Disposition: file; name="%s"; filename="%s"' % \
(field_name, filename),
'Content-Type: %s' % content_type,
'',
str(body),
]
for field_name, filename, content_type, body in files
)
Этот код заливает картинку на тестовый пхп-скрипт без проблем. Я вижу что она пришла в запросе, правда не проверял её валидность
При заливке на сервер - сервер её отвергает. Проверить почему - нельзя. Руками через веб-интерфейс туда же она заливается

1 “filename=”%s“'”
можно ли вместо filename указывать полный путь к картинке? При отправке через браузер там находится лишь имя файла

2 если отправлять str(body) - в запросе явно видно b“тело”
если делать body.decode('utf-8') - он не может правильно декодировать, находит неопознанные символы
если добавить ignore - понятно что картинка побъется

как грамотно приклеить байты к запросу, так чтобы они отправлялись без b“” ?
уж наверняка не отрезать это b“” строковыми функциями?



Офлайн

#2 Май 5, 2011 22:04:10

Игнат
От:
Зарегистрирован: 2010-10-02
Сообщения: 224
Репутация: +  0  -
Профиль   Отправить e-mail  

как декодировать bytearray, содержащий бинарный файл?

пока нашлось решение заворачивать в bytes() все остальные текстовые составляющиеэ
и заработало

        # Add the files to upload
parts2 = [
[ bytes(part_boundary,'utf8'),
bytes('Content-Disposition: file; name="%s"; filename="%s"' % \
(field_name, filename),'utf8'),
bytes('Content-Type: %s' % content_type, 'utf8'),
b'',
body,
]
for field_name, filename, content_type, body in files
]
это нормально?



Офлайн

#3 Май 6, 2011 14:05:27

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

как декодировать bytearray, содержащий бинарный файл?

Это — нормально. payload для post запроса должен быть байтами, а не строкой.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version