2012-10-28 11 views
26

クライアントにコンテンツをストリーミングしたい場合は、ファイルとして保存することがあります。ノード/クライアントへのストリームファイル

明らかにres.downloadはジョブをうまくやってくれますが、response。*関数のどれもストリームを受け入れず、ファイルパスのみを受け取ります。

私はres.download implを見て、Content-Dispositionヘッダーとsendfileを設定しました。

私はこれをガイドとしてこのポストを使って達成することができました。 Node.js: pipe stream to response freezes over HTTPS

しかし、私はres.sendが実行するすべてのラッピングの面を見逃しているようです。

私はここに何かを見つけられませんか、私はパイプをして、それについて心配しないでください - ここでベストプラクティスは何ですか?

現在、一時ファイルを作成していますので、すぐにres.downloadを使用できます。

+0

のような例については、この方法を試してみてくださいhttp://stackoverflow.com/questions/10207762/how-to-use-request-or-http-module-to-read-gzip-page-into-a-文字列/ 10603029#10603029 –

答えて

63

応答オブジェクト(ストリーム)に直接ストリームできます。

基本的なファイルストリームは次のようになります。

function(req, res, next) { 
    if(req.url==="somethingorAnother") { 
    res.setHeader("content-type", "some/type"); 
    fs.createReadStream("./toSomeFile").pipe(res); 
    } else { 
    next(); // not our concern, pass along to next middleware function 
    } 
} 

これはdataendイベントへの結合の世話をします。

+2

@Timあなたのために働いた場合は、これを答えとしてマークする必要があります。 –

+0

upvotesが与えられていると、それは多くの人にとってうまくいくと思われます。ありがとう! – jlh

+1

'req.url!==" somethingorAnother "'ならば、 – Carlos

1

クライアントからのAJAXリクエストに適切な 'responseType'が設定されていることを確認してください。

$http({ 
    method :'GET', 
    url : http://url, 
    params:{}, 
    responseType: 'arraybuffer' 
}).success() 
関連する問題