2

I am trying to upload files through a lambda function and request/response is working fine. Problem is each uploaded file is missing some data so the uploaded file is corrupted. e.g. if I try to upload a 5 Kb file, only 4.5 Kb is getting uploaded. This is confirmed with size variable from logs.

parseMultipart = async (event) => {
    return new Promise((resolve, reject) => {
      const parsedForm = {};
      const bb = new busboy({
        headers: {
          'content-type': event.headers['Content-Type'] || event.headers['content-type']
        }
      });
  
      bb.on('file', function (fieldname, file, filename, encoding, mimetype) {
          var bufs = [];
          var size = 0;

          file
            .on('data', async (data) => {
              //bufs[bufs.length] = data;
              await bufs.push(data);
              size += data.length;
              console.log('size:' + size);
            })
            .on('end', async () => { 
              console.log('size in end:' + size);
              parsedForm[fieldname] = {
                data: Buffer.concat(bufs),
                filename: filename,
                encoding: encoding,
                mimetype: mimetype
              };
            });
        })
        .on('field', (fieldname, val) => {
          parsedForm[fieldname] = val
        })
        .on('finish', async () => {
          console.log("in finish:");
          await resolve(parsedForm);
          })
        .on('close', () => {
          console.log("in close");
          resolve(parsedForm);
          })  
        .on('error', error => reject(error))
  
        bb.write(event.body, event.isBase64Encoded ? 'base64' : 'binary');
        bb.end();
    })
  }

What is it that I am missing or doing differently? I have already checked relevant questions on SO for busboy.

Ashwini Shahapurkar
  • 6,586
  • 6
  • 26
  • 35

0 Answers0