Потоковая передача загруженного файла на s3 с использованием грозного - PullRequest
0 голосов
/ 28 января 2020

Я знаю, что этот вопрос задавался несколько раз, но все же я не смог заставить его работать, я использую грозный для разбора входящего файла, вместо хранения файла в памяти, я хочу передать на 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);
};

Поскольку я звоню s3.upload для каждого chunk, он переопределяет предыдущий кусок данных, так как я могу обработать поток на s3?

1 Ответ

0 голосов
/ 01 февраля 2020

Я решил эту проблему следующим образом.

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);
  };
...