javascript - 获取流的内容长度

标签 javascript node.js stream amazon-s3

在我的 node.js 应用程序中,我使用的是 gm (a graphicsmagick wrapper)aws2js (amazon cli wrapper) .问题是亚马逊需要知道内容长度,以便我可以将流放在 S3 上。

我正在将图像上传到我的应用,通过创建流来读取该文件:

var fileStream=fs.createReadStream(file.path)

我将该文件传递给 gm,调整它的大小,然后告诉它流式传输该文件。然后我想将该流放到 aws:

gm( fileStream, "some.png" ).                               
    identify({bufferStream: true}, function(err, info) {
        this.stream("png", function (err, stdout, stderr) {
            if (err){console.log(err);cb(err);return;}

            aws.S3.putStream(path, stdout, 'public-read', {'content-length': ?????, 'content-type': 'image/png'}, function (err, result) {
            .....       
            }
        });
    });
});

问题是亚马逊需要知道内容长度(它不是库)来放置流。 AWS 不支持分 block 流。

有谁知道我如何确定流的内容长度?还是唯一的解决方案是将 tmp 写入磁盘,将文件作为流读取,然后使用临时文件的内容长度将其放入亚马逊?

最佳答案

gm( fileStream ).filesize({bufferStream: true}, function (error, filesize) {
  this.stream(function (error, stdout, stderr) {
    aws.S3.putStream(path, stdout, 'public-read', {'content-length': filesize, 'content-type': 'image/png'}, function (error, result) {
      // .....       
    });
  });
});

关于javascript - 获取流的内容长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9240724/

相关文章:

c# - 使用 DotNetZip 和 MemoryStream 时,解压缩数据被填充为 '\0'

javascript - 在 Meteor 中关闭文件监视

node.js - 将工具安全迁移到 Homebrew

javascript - node.js:在全局范围内混淆 'this' 的用法

node.js - 获取 MongoDB 字段中具有最小值或最大值的文档

c# - 为什么这个副本 Stream 比它原来的 Stream 大?

flutter - 在 RxDart 中用什么代替 "combineLatest2"?

javascript - if else 子句中 undefined object 的未定义属性

javascript - make on keyup 仅在输入内部触发一次

javascript - 并排对齐 Toastr