У меня есть установка в AWS, где у меня есть лямбда-Python, прокси-сервер s3, содержащий файлы .tar.gz.Мне нужно вернуть файл .tar.gz из лямбды Python обратно через API для пользователя.
Я не хочу распаковывать файл, я хочу вернуть tar-файл как есть, и кажется,Модуль tarfile
не поддерживает чтение в виде байтов.
Я попытался использовать метод .open
Python (который возвращает ошибку кодека в utf-8).Затем codecs.open
с errors
, установленным на ignore
и replace
, что приводит к тому, что результирующий файл не распознается как .tar.gz
Реализация (распаковка двоичного файла tar)
try:
data = client.get_object(Bucket=bucket, Key=key)
headers['Content-Type'] = data['ContentType']
if key.endswith('.tar.gz'):
with open('/tmp/tmpfile', 'wb') as wbf:
bucketobj.download_fileobj(key, wbf)
with codecs.open('/tmp/tmpfile', "rb",encoding='utf-8', errors='ignore') as fdata:
body = fdata.read()
headers['Content-Disposition'] = 'attachment; filename="{}"'.format(key.split('/')[-1])
Использование (информация пакета / aws отредактирована для безопасности)
$ wget -v https://<apigfqdn>/release/simple/<package>/<package>-1.0.4.tar.gz
$ tar -xzf <package>-1.0.4.tar.gz
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now