如何以纯文本形式下载 S3 驱动器上的压缩内容?

How do I download compressed content on a S3 drive as plain text?

我有 HTML 数据存储在 S3 存储桶上,用作以 gzip 格式存储的静态站点。虽然我可以正确访问我的 S3 站点并且浏览器知道解压缩它,但我无法使用 AWS CLI 下载它,因为下载的原始数据即使在被复制到磁盘后仍保持 gzip 压缩(而不是下载后解压缩),因此通过文本编辑器或浏览器打开时出现乱码。

我已尝试显式传递内容编码以将 S3 上的 gzip 内容转换为纯文本,但下载的文件似乎仍然具有 gzip 字节而不是原始 UTF-8。这是我试过的命令:

aws s3 cp s3://mys3bucket.com/index.html ./test.html --content-encoding "gzip" --content-type "text/html"

下载后(或同时)您可以自行解压缩数据。如果您使用的是 Unix 变体,这将通过管道输出到 zcat 来完成,如下所示:

aws s3 cp s3://mys3bucket.com/index.html ./test.html --content-encoding "gzip" --content-type "text/html" | zcat

您也可以将数据存储在文件中,然后再解压缩。

在 S3 端解压缩它是无稽之谈,因为那样你必须传输更多数据(未压缩版本)。

这就是我在 python.

中下载(从 aws s3)和解压缩文件的方式

uncompress.py

import os
import sys
import gzip

#uncompress downloaded folder ( gzip files)
#it overwrittes same downloaded folder no need to create separate folder to store uncompressed files

def unCompress(ROOT):
    for entry in os.listdir(ROOT):
        path = os.path.join(ROOT,entry)
        if os.path.isdir(path):
            unCompress(path)
        else:
             data = ''
             with open(path,'rb') as f:
                 data = f.read()
             with open(path,'wb') as f:
                 f.write(gzip.decompress(data))

main.py

import os
from uncompress import unCompress

FOLDER_NAME = "myProject"            #folder to download from aws s3
LOCAL_PATH= "./downloads/"+FOLDER_NAME      #local path to store downloaded files

cmd = ("aws s3 cp s3://bucketName/"+FOLDER_NAME+" "+LOCAL_PATH+" --recursive --quiet")
result = os.system(cmd)

if result != 0:
   print('Error')
else:
   unCompress(LOCAL_PATH)  #uncompress downloaded files