在我的node.js应用程序中,我正在使用gm (a graphicsmagick wrapper)aws2js (amazon cli wrapper)。问题是Amazon需要知道内容长度,以便我可以将流放到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) {
            .....
            }
        });
    });
});

问题在于,Amazon需要知道内容长度(不是库)才能放入流。 AWS不支持分块流。

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

最佳答案

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/

10-09 00:08