这是我在 node.js 中的代码:
const downloadURL = await s3.getSignedUrlPromise('getObject', {
Bucket: BUCKET_NAME,
Key: 'key to a large json file',
});
我得到了 URL,我想从浏览器下载一个存储在 S3 中的非常大的 JSON 文件。由于它很大,我想使用 HTTP 压缩将 20MB 的 JSON 压缩到小于 1MB。我在任何地方都找不到如何做,也找不到 S3 API 是否完全可行。
当使用签名 URL 下载文件时,我也尝试执行以下操作,但似乎不起作用。
const dataRes = await fetch(downloadURL, {
headers: {
'Accept-Encoding': 'gzip, deflate',
},
method: 'GET',
});
希望有人能帮帮我。非常感谢!
最佳答案
经过研究,我已经解决了这个问题。在这里发帖,希望对其他人有帮助。
- 当
getObject
或使用签名 URL 到getObject
时,您不能要求 S3 即时压缩文件 - 您必须首先将压缩文件保存到 S3 中。在 Linux 中,使用以下命令来执行此操作:
gzip -9 <file to compress>
- 将压缩文件上传到S3
- 使用以下代码生成签名网址:
const downloadURL = await s3.getSignedUrlPromise('getObject', { Bucket: BUCKET_NAME, Key: 'key to a large zipped json file', ResponseContentEncoding: 'gzip', ResponseContentType: 'application/json', });
- 使用以下代码从签名 URL 下载:
const res = await fetch(downloadurl); const jsonData = await res.json();
关于amazon-s3 - 如何获得使用 http 压缩下载文件的预签名 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66451936/