Caricamento mp4 corrotto / troncato nel bucket S3 utilizzando NodeJS e AWS S3

Sto usando fs.readFile per leggere in un file mp4 locale di circa 700KB e AWS SDK per caricare il file sul mio bucket S3. Il processo funziona, ma il file è corrotto, presumibilmente troncato perché la dimensione del file risultante su S3 è solo di circa 500 KB.

Il codice che sto usando funziona bene per le immagini. Semplicemente non funziona per i file mp4. Ecco il mio codice:

fs.readFile(file_location, function (err, data) { if (err) { console.log('fs error': err); } else { var base64data = new Buffer(data, 'binary'); var params = { Bucket: config.settings.bucket, Key: 'file.mp4', Body: base64data, ContentEncoding: 'base64', ContentType: 'video/mp4' }; s3.putObject(params, function(err, data) { if (err) { console.log('Error putting object on S3: ', err); } else { console.log('Placed object on S3: ', object_key); } }); } }); 

Ho provato a omettere le proprietà ContentEncoding e / o ContentType dall’object params.

MODIFICARE:

Quindi, quando ho fatto un console.log della lunghezza dei dati restituiti da fs.readFile, esso risulta costantemente basso. Non mi ero reso conto che in realtà non stavo gestendo i dati di base64. Quindi se uso il seguente codice dove chiedo di leggere il file usando base64, data.length da fs.readFile sembra essere corretto, e un file mp4 compare sul mio bucket S3 con un playhead nel browser (che io non stava arrivando prima), ma il video non verrà riprodotto ed è nero, quindi sembra essere ancora corrotto.

 fs.readFile(file_location, 'base64', function (err, data) { if (err) { console.log('fs error': err); } else { var params = { Bucket: config.settings.bucket, Key: 'file.mp4', Body: data, ContentEncoding: 'base64', ContentType: 'video/mp4' }; s3.putObject(params, function(err, data) { if (err) { console.log('Error putting object on S3: ', err); } else { console.log('Placed object on S3: ', object_key); } }); } }); 

La variabile di data che si ottiene da readFile è già readFile . Basta passarlo direttamente con Body: data . ContentEncoding completamente il parametro ContentEncoding poiché non si inviano dati base64.