node.js - 如何将字符串作为 gzip Nodejs 上传到 s3

标签 node.js amazon-s3 upload gzip

我有一个从 Redis 读取字符串数组的 node.JS 程序。 我需要将此字符串以 GZIP 格式上传到我在 AWS s3 中的存储桶,而无需在上传前在本地创建 gzip 文件。

基本上,我希望将读取的字符串从 Redis 流式传输到 gzip 压缩的 s3 存储桶。

除了上述问题,我想知道以这种方式编程的有效和推荐方式是什么,因此将存储在 S3 中的文件最大为 64 MB,并且有额外的数据,将创建附加文件(也限制为最大 64MB)。 在下面的示例中,我展示了如何从 Redis 键中读取要存储在 s3 gzip 中的值限制为 64 MB:

client.lrange(key, 0, -1, (error, arrayStringValue) => {
            if (arrayStringValue == null || !arrayStringValue.length) {
                client.del(key);
                return console.log("removing key, no values");
            }
            if (error) reject(error);
            console.log("finish iterating");
            impressionsRecorded = true;
            //compress 
            uploadToS3(arrayStringValue, "bucket/key", null);

基本上我缺少的是 uploadToS3 方法的正确实现

最佳答案

我不得不解决同样的问题。这是我在 Node.js 中的解决方案。

const zlib = require('zlib');

const uncompressedString = 'Hi there';

const compressedStringAsBuffer = zlib.gzipSync(uncompressedString);

const AWS = require('aws-sdk');
const s3 = new AWS.S3();

const s3Params = {
      Bucket: 'my-bucket',
      Body: compressedStringAsBuffer,
      Key: 'my-compressed-string.txt.gzip', // .gzip isn't required
      ContentType: 'text/plain', // change the ContentType if you want to serve HTML, CSS, JS, etc.
      ContentEncoding: 'gzip' // that's important
    };

await s3.putObject(s3Params).promise();

关于node.js - 如何将字符串作为 gzip Nodejs 上传到 s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54270169/

相关文章:

node.js - Docker 公开端口 - OCI 运行时创建失败

javascript - SocketIO 如何为任何给定事件提供通用的 .on() 事件?

perl - PERL Net::Amazon::S3 BucketAlreadyExists:请求的存储桶名称不可用

ruby-on-rails - 从 Ruby on Rails 多次上传到 Amazon S3 - 使用什么后台处理系统?

ruby - Capistrano 3.0 文件传输?

javascript - Node js mongoose 从集合中的数组中查找数据

javascript - 将 JavaScript 对象与 "default"版本进行比较?

node.js - 如何使用 aws-sdk 获取 AWS S3 上文件的 URL?

file - Symfony2文件上传步骤

Angular 2 没有将 Content-Type 设置为 'multipart/form-data' 而是设置为 'application/json'