Я создаю приложение, которое принимает некоторые загрузки файлов и отправляет их прямо на S3. Я бы предпочел не иметь файл tmp на моем сервере, поэтому я использую модуль Knox и хотел бы взять необработанный поток из Formidable и отправить его через Knox на S3. Я сделал что-то подобное с помощью Knox для загрузки файла с помощью этого кода:
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();
Теперь я хотел бы сделать что-то подобное в oposite направлении (загрузка файла из браузера на S3).
До сих пор я написал обработчик событий для захвата каждой части данных из файла при ее загрузке:
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);
}
});
}
Но событие данных только дает мне буфер. Так можно ли захватить сам поток и нажать его на S3?