我目前正在使用名为s3-upload-stream的node.js插件将非常大的文件流式传输到Amazon S3。它使用了多部分的API,并且在大多数情况下效果很好。
但是,该模块显示了它的年龄,我已经不得不对其进行修改(作者也已弃用了它)。今天,我遇到了另一个与亚马逊有关的问题,我真的很想接受作者的建议,并开始使用官方的aws- sdk完成上传。
但。
官方的SDK似乎不支持管道到s3.upload()。s3.upload的本质是,您必须将可读流作为参数传递给S3构造函数。
s3.upload()
我大约有120多个用户代码模块,可以执行各种文件处理,并且它们与输出的最终目标无关。引擎将它们传递给可传递的可写输出流,然后传递给它。我不能在不向所有模块添加代码的情况下将AWS.S3它们交给对象并要求他们调用upload()它。我之所以使用s3-upload- stream它是因为它支持管道。
AWS.S3
upload()
s3-upload- stream
有什么方法可以使aws-sdk s3.upload()可以通过流传输到其中?
upload()用node.js stream.PassThrough()流包装S3 函数。
stream.PassThrough()
这是一个例子:
inputStream .pipe(uploadFromStream(s3)); function uploadFromStream(s3) { var pass = new stream.PassThrough(); var params = {Bucket: BUCKET, Key: KEY, Body: pass}; s3.upload(params, function(err, data) { console.log(err, data); }); return pass; }