一尘不染

将流传输到s3.upload()

node.js

我目前正在使用名为s3-upload-stream的node.js插件非常大的文件流式传输到Amazon
S3。它使用了多部分的API,并且在大多数情况下效果很好。

但是,该模块显示了它的年龄,我已经不得不对其进行修改(作者也已弃用了它)。今天,我遇到了另一个与亚马逊有关的问题,我真的很想接受作者的建议,并开始使用官方的aws-
sdk完成上传。

但。

官方的SDK似乎不支持管道到s3.upload()。s3.upload的本质是,您必须将可读流作为参数传递给S3构造函数。

我大约有120多个用户代码模块,可以执行各种文件处理,并且它们与输出的最终目标无关。引擎将它们传递给可传递的可写输出流,然后传递给它。我不能在不向所有模块添加代码的情况下将AWS.S3它们交给对象并要求他们调用upload()它。我之所以使用s3-upload- stream它是因为它支持管道。

有什么方法可以使aws-sdk s3.upload()可以通过流传输到其中?


阅读 477

收藏
2020-07-07

共1个答案

一尘不染

upload()用node.js stream.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;
}
2020-07-07