Чтение tarfile в виде байтов - PullRequest
0 голосов
/ 10 мая 2018

У меня есть установка в 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
...