如何以纯文本形式下载 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
我有 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