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.