通过 CloudFront 下载压缩的 CSV 文件

Downloading zipped CSV file through CloudFront

我有一个 lambda 函数,调用时会使用以下命令将 unload() 从 redshift 数据库卸载到 s3 存储桶:

unload ('<SQL QUERY TO UNLOAD')
to 's3://<BUCKET
iam_role 'arn:aws:iam::<ROLEID>
delimiter ','
PARALLEL OFF
ESCAPE
ALLOWOVERWRITE
GZIP

然后我 运行 在该操作完成后尝试添加 ContentType 和 ContentEncoding headers:

以下 nodejs 代码
s3.copyObject({
     Bucket: directory,
     MetadataDirective: 'REPLACE',
     CopySource: `${directory}/${files[i].Key}`,
     ContentType: 'text/csv',
     ContentEncoding: 'gzip',
     Key: `${files[i].Key}`
}).promise()

最后,完成后,我通过电子邮件将 CloudFront link 发送给请求数据的用户。当用户点击 link 时,他们会下载一个 .gz 文件。我希望当用户解压缩他们找到 .csv 文件的文件时,他们会找到一个没有文件扩展名的文件...

有没有办法通过 CloudFront return 压缩的 csv 文件(如果 CloudFront 不是一个选项,甚至可以通过 s3)。

按照目前的情况,用户每次下载我的数据时都必须解压缩然后添加 .csv 文件扩展名,这不太理想。

Georgeawg 帮助我意识到我可以只使用 s3 的 copyObject 函数将文件重命名为 csv.gz。然后我 运行 removeObject 删除旧文件和 return csv.gz 文件。它解压正确。