我正在創建一個應用程序,需要一些文件上傳並直接發送到S3。我寧願不要在我的服務器上安裝tmp文件,所以我使用了Knox模塊,並希望將來自Formidable的原始數據流通過Knox發送到S3。我一直在使用諾克斯使用此代碼下載文件做了類似的事情:從節點強大的文件上載訪問原始文件流
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();
現在我想(從瀏覽器到S3文件上傳)做的oposite方向類似的東西。
到目前爲止,我已經寫了一個事件處理程序來捕捉每一塊數據從文件,因爲它是被上傳:
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?
我很困難,切換到多方解決這個問題 –