amazon-s3 - 如何获得使用 http 压缩下载文件的预签名 URL

标签 amazon-s3

这是我在 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/

相关文章:

node.js - AWS S3 putObject 回调未触发

amazon-web-services - AWS Cloudformation 模板 - 在 S3 存储桶中设置区域

android - 如何注销 aws cognito - android?

javascript - 将文件上传到 S3(法兰克福)时出现错误授权 AWS4-HMAC-SHA256

amazon-web-services - 使用 Init 中的更新文件更新 CloudFormation 堆栈

amazon-s3 - 在 AWS Glue 中将增量数据从 Dynamodb 加载到 S3

amazon-web-services - amazon cloudfront 和amazon s3 传输加速有什么区别吗?

ruby-on-rails - 如何使用 Paperclip 和 Rails 从 Amazon S3 中删除文件?

amazon-web-services - 获取 AWS S3 存储桶的 CLI 配置

android - 无法读取 S3TransferUtility 请检查您的设置或 awsconfiguration.json 文件