我在AWS中有一个设置,我有一个python lambda代理包含.tar.gz文件的s3存储桶。我需要将python lambda中的.tar.gz文件通过API返回给用户。
我不想解压缩文件,我想按原样返回tar文件,似乎tarfile
模块不支持以字节形式读取。
我尝试过使用python的.open
方法(在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