Найти - Пользователи
Полная версия: как декодировать bytearray, содержащий бинарный файл?
Начало » Python для новичков » как декодировать bytearray, содержащий бинарный файл?
1
Игнат
такая задача - отправить пост-запрос на сервер, чтобы загрузить туда картинку

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

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

        
# 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“” строковыми функциями?
Игнат
пока нашлось решение заворачивать в 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
]
это нормально?
Андрей Светлов
Это — нормально. payload для post запроса должен быть байтами, а не строкой.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB