繁体   English   中英

获取流的内容长度

[英]get a stream's content-length

在我的node.js应用程序中,我正在使用gm(一个graphicsmagick包装器)aws2js(amazon cli包装器) 问题是亚马逊需要知道内容长度,以便我可以将流放在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不支持分块流。

有谁知道我如何确定流的内容长度? 或者唯一的解决方案是将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) {
      // .....       
    });
  });
});

这取决于您上传的方式。 我正在使用express.js,我从req.files对象获取长度,如req.files。[文件输入名称] .length。

我实际上试图做同样的事情,但我遇到了aws2js识别流的问题。 如果你让它工作,请告诉我。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM