使用 formidable 将上传的文件流式传输到 s3

Streaming uploaded file to s3 using formidable

我知道这个问题已经被问过很多次了,但我仍然无法解决这个问题, 我正在使用 formidable 来解析传入的文件,而不是将文件存储在内存中,我想流式传输到 s3。

我的请求处理程序如下所示。

profile = async (req: Request) => {
    const form = new IncomingForm();
    form.onPart = (part: Part) => {
      part.on("data", function(data){
          // here calling s3 upload for each chunk
          s3.upload({Body: data, Key: 'test.jpg'})
      })
    };

    form.parse(req);
};

因为我为每个 chunk 调用 s3.upload 它会覆盖之前的数据块,所以我如何处理到 s3 的流?

我按照下面的方法解决了这个问题。

profile = async (req: Request) => {
    const form = new IncomingForm();
    const passThrough = new PassThrough();
    const promise = s3.upload({Bucket: 'my-test-bucket', Key: 'unique.jpg', Body: 
    passThrough}).promise()
    form.onPart = (part: Part) => {
        part.on("data", function(data){
           // pass chunk to passThrough
           data.pipe(passThrough)
        })
    };

     promise.then(uploadedData => console.log(uploadedData)).catch(err => console.log(err))

     form.parse(req);
  };