ec2経由でs3にファイルをアップロードしようとしています。私の最初のアプローチは、ファイルをec2に完全にアップロードしてから、そのファイルをs3にアップロードすることでした。ec2 から s3 への転送時間が時間の無駄になるため、このアプローチは適切ではありません。
現在、私はbusboyアップロードストリームをs3アップロードストリームに使用しようとしています。これにより、ec2へのアップロードと、次にec2からs3へのアップロードが、s3の「アップロード」メソッドサポートストリームとしてアップロードボディとして同時に行われます。
ここに私のコードがあります -
router.post('/s3StreamUpload', function(req, res, next) {
var busboy = new Busboy({headers: req.headers});
busboy.on('file', function (fieldname, file, filename, encoding, mimetype) {
console.log('Before Upload: ' + new Date());
console.log('File [' + fieldname + ']: filename: ' + filename + ', encoding: ' + encoding + ', mimetype: ' + mimetype);
var s3 = new AWS.S3({
params: {Bucket: 'sswa', Key: filename, Body: file},
options: {partSize: 5 * 1024 * 1024, queueSize: 10} // 5 MB
});
s3.upload().on('httpUploadProgress', function (evt) {
console.log(evt);
}).send(function (err, data) {
console.log('After Upload: ' + new Date());
console.log(err, data);
});
});
busboy.on('field', function(fieldname, val, fieldnameTruncated, valTruncated, encoding, mimetype) {
console.log('Field [' + fieldname + ']: value: ' + inspect(val));
});
busboy.on('finish', function() {
console.log('Done parsing form!');
res.writeHead(303, { Connection: 'close', Location: '/' });
res.end();
});
req.pipe(busboy);
});
本当にストリームとして同時に s3 にアップロードしているのでしょうか? このアプローチの欠点はありますか?