私はいくつかのファイルをアップロードし、それをS3までまっすぐに送信するアプリケーションを作成しています。私はサーバ上にtmpファイルを持っていない方がいいですからKnoxモジュールを使い、FormidableからRawストリームを取り出して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();
今私は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にプッシュすることは可能ですか?
私はとても固執していたので、これを解決しました –