【发布时间】:2012-02-11 13:51:21
【问题描述】:
在我的 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 不支持分块流。
有谁知道我如何确定流的内容长度?还是唯一的解决方案是将 tmp 写入磁盘,将文件作为流读取,然后使用临时文件的内容长度将其放入亚马逊?
【问题讨论】:
-
你有没有想过这个问题?我正在尝试做完全相同的事情......
-
比尔;我缓冲结果并获取它的大小。可悲的是,没有其他方法可以做到这一点,因为亚马逊需要知道大小并且流很好 - 流 - 没有固定长度。
标签: javascript node.js stream amazon-s3