Je suis entrain de créer une application qui ne prend que quelques téléchargements de fichiers et de les envoyer tout droit jusqu'à S3. Je préfère ne pas même avoir la tmp fichier sur mon serveur, donc je suis en utilisant le Knox module et aimerait profiter de la crue de flux de Formidable et de l'envoyer sur Knox à S3. J'ai fait quelque chose de similaire à l'aide de Knox pour télécharger un fichier à l'aide de ce code:
knox.downloads.get(widget.download).on('response',function(sres){
res.writeHead(200, {
'Content-Type':'application/zip',
'Content-Length': sres.headers['content-length'],
'Content-Disposition':'attachment; filename=' + widget.download
});
util.pump(sres, res);
}).end();
Maintenant, je voudrais faire quelque chose de similaire dans la direction oppos (téléchargement de Fichier depuis le navigateur à S3).
Jusqu'à présent, j'ai écrit un gestionnaire d'événement pour capturer chaque morceau de données à partir du fichier car il est en cours de téléchargement:
var form = new formidable.IncomingForm();
form.onPart = function(part){
if(!part.filename){
form.handlePart(part);
}else{
if(part.name == 'download'){
// Upload to download bucket
controller.putDownload(part);
}else{
// Upload to the image bucket
controller.putImage(part);
}
//res.send(sys.inspect(part));
}
}
form.parse(req, function(err, fields, files){
if(err){
res.json(err);
}else{
res.send(sys.inspect({fields:fields, files:files}), {'content-type':'text/plain'});
//controller.createWidget(res,fields,files);
}
});
controller.putDownload = function(part){
part.addListener('data', function(buffer){
knox.download.putStream(data,part.filename, function(err,s3res){
if(err)throwError(err);
else{
console.log(s3res);
}
});
})
knox.downloads.putStream(part, part.filename, function(err,s3res){
if(err)throwError(err);
else{
console.log(s3res);
}
});
}
Mais l'événement de données seulement donnez-moi la mémoire tampon. Ainsi est-il possible de capturer le flux lui-même et de le pousser à S3?