我目前正在使用名为s3-upload-stream的node.js插件将非常大的文件流式传输到Amazon S3。它使用了多部分的API,并且在大多数情况下效果很好。
但是,此模块显示了它的年龄,我已经不得不对其进行修改(作者也已弃用它)。今天,我遇到了另一个与亚马逊有关的问题,我真的很想接受作者的建议,并开始使用官方的aws-sdk完成上传。
但。
官方的SDK似乎不支持管道到s3.upload()
。s3.upload的本质是,您必须将可读流作为参数传递给S3构造函数。
我大约有120多个用户代码模块,可以执行各种文件处理,并且它们与输出的最终目标无关。引擎将它们传递给可管道传输的可写输出流,并通过管道传递给它。我不能给他们一个AWS.S3
对象并要求他们调用upload()
它,而无需在所有模块中添加代码。我之所以使用s3-upload-stream
它是因为它支持管道。
有没有什么方法可以将aws-sdks3.upload()
传送到流中?
upload()
用node.jsstream.PassThrough()
流包装S3函数。
这是一个例子:
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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句