获取stream的内容长度

在我的node.js应用程序中,我使用gm(graphicsmagick包装器)和aws2js(亚马逊cli包装器) 。 问题是,亚马逊需要知道内容的长度,以便我可以把stream在S3上。

我正在将图像上传到我的应用程序,通过创build一个stream来读取该文件:

var fileStream=fs.createReadStream(file.path) 

我把这个文件传给gm,调整它的大小,然后告诉它来传输这个文件。 然后我想把这个stream到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) { ..... } }); }); }); 

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

有谁知道我怎么能确定一个stream的内容长度? 或者唯一的解决办法是将tmp写入磁盘,以stream的forms读取文件,然后将其与temp文件的内容长度一起放到amazon中?

 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) { // ..... }); }); }); 

这取决于你如何做上传。 我正在使用express.js,并从req.files对象中获取长度,例如req.files。[file input name] .length。

我实际上正在尝试做同样的事情,但我遇到了aws2js识别stream的问题。 让我知道,如果你得到它的工作。