我目前正在使用一个 node .js插件调用s3-upload-stream将非常大的文件流式传输到Amazon S3.它使用多部分API,并且在大多数情况下工作得很好.

然而,这个模块显示了它的年龄,我已经对它进行了修改(作者也不赞成).今天我遇到了亚马逊的另一个问题,我真的很想采纳作者的建议,开始使用官方的aws sdk来完成我的上传.

但是

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

我有大约120多个用户代码模块,可以进行各种文件处理,它们不知道输出的最终目的地.引擎给他们一个可通过管道写入的输出流,然后他们通过管道传输到它.我不能给他们一个AWS.S3的对象,让他们调用upload(),而不给所有模块添加代码.我使用s3-upload-stream的原因是它支持管道.

有没有办法让aws sdk s3.upload()成为我可以通过管道传输数据流的东西?

推荐答案

用 node 包装S3upload()函数.js 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;
}

Node.js相关问答推荐

无法使用NPM安装REDUX和DATEPPICER

在函数上执行 toString 的Typescript 会产生奇怪的字符 (path_1, (0, Promise.writeFile))

为什么我的 Node.js 应用程序在登录时无法正确验证密码(使用 Passport-local 和 bcryptjs)?

动态设置元数据,无需重复请求 NextJS 13

AWS ECS 服务发现 Cors 问题?

如何获取文件的中间值?

Next.js 在我的电脑上没有构建错误,但它们在使用 Vercel 部署时发生

ResponseError:键空间ks1不存在

firebase/messaging 不提供名为 getToken 的导出

将 express js app.use() 移动到另一个文件

为什么我的 npm 脚本中的 glob 不起作用?

使用`useLocalStorage`和`useDebounce`时如何解决Next.js中的react-hydration-error

将 AllowDiskUse true 添加到 node.js 中的 MongoDB 聚合?

Mongodb 从文档中获取聚合结果中的特定属性

MongoDB Atlas中的聚合触发器不起作用

表达限制资源属于特定用户的优雅方式

使用 grunt 服务器,如何将所有请求重定向到根 url?

如何使用适用于 Node.js 的 AWS 开发工具包将 Amazon S3 中的所有对象从一个前缀复制/移动到另一个前缀

Sequelize 基于关联的查找

如何创建安全(TLS/SSL)Websocket 服务器