以字节

时间:2018-05-10 17:48:03

标签: python amazon-web-services aws-lambda codec api-gateway

我在AWS中有一个设置,我有一个python lambda代理包含.tar.gz文件的s3存储桶。我需要将python lambda中的.tar.gz文件通过API返回给用户。

我不想解压缩文件,我想按原样返回tar文件,似乎tarfile模块不支持以字节形式读取。

我尝试过使用python的.open方法(在utf-8中返回编解码器错误)。然后codecs.open errors设置为ignorereplace,导致生成的文件无法识别为.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

0 个答案:

没有答案