#python #amazon-web-services #compression #gzip #amazon-sqs
Вопрос:
У меня есть html-файл с именем 75842.html
, и я сжимаю файл с помощью gzip, выполнив следующие действия:
with open('75842.html', 'rb') as f:
body_compressed=gzip.compress(f.read())
body_compressed
является <class 'bytes'>
объектом.
Я не могу отправлять байты через SQS, тело сообщения должно быть строкой. Поэтому я определяю MessageBody=str(body_compressed)
при отправке файла.
При чтении сообщения на другом сервере я хотел бы распаковать и сохранить его с помощью:
with open('75842_decompressed.html', 'w') as f:
f.write(gzip.decompress(str.encode(body)))
Затем я получаю сообщение об ошибке gzip.BadGzipFile: Not a gzipped file (b"b'")
. Вероятно, потому, что файл начинается с буквы «б». Однако я не уверен, как это решить. Мы очень ценим любую помощь.
Ответ №1:
Использование str()
— ужасная идея. В итоге вы увеличиваете размер данных в три раза, стирая преимущества сжатия! Вы смотрели на длину до и после str()
?
Каковы ограничения на данные, которые вы можете отправлять? Если вы можете отправлять только печатные символы, вы можете использовать кодировку Base-64 или Base-85, которые расширяют данные всего на несколько десятков процентов, а не в несколько раз.