2012-02-17 9 views
17

node.js/expressでファイルをどのように送信しますか?node.jsでファイルを送信する方法

私はRackspace Cloudfilesを使用していて、画像や動画をリモートストレージに送信したいと思いますが、ファイル(fs.readFileSync())を読み込み、そのデータをリクエスト本体に送信することは簡単ではありません。それ?

ヘッダーはどうすればよいですか。

数GBの非常に大きなファイルの場合はどうなりますか?

これにスーパーエージェント(http://visionmedia.github.com/superagent)を使用することは可能ですか、それともファイルを送信するためのライブラリがありますか?

私にこれに関するいくつかの情報を教えてください。

ありがとうございます!

答えて

5

私はRackspaceのCloudfilesとたいを使用しています彼らのリモートストレージに画像/動画を送信するが、私はそれがファイル(fs.readFileSyncを())を読み取ると同じくらい簡単だということを確認していないと、要求本体にデータを送って、またはそれは?あなたは一般的にfs.readFileSyncを使用しないでください

。使用する場合、またはsomethingSyncと呼ばれる他の方法を使用する場合は、その呼び出しの間、サーバー全体をブロックします。 node.jsプログラムで同期呼び出しを行うための許容時間は起動時です。

ヘッダーはどうなりますか。

RackSpace Cloud Files APIを参照してください。

これにスーパーエージェント(http://visionmedia.github.com/superagent)を使用することは可能ですか、それともファイルを送信するためのライブラリがありますか?

私はスーパーエージェントの経験はありませんが、うまくいくと思います。 APIのドキュメントを読んで、仕様に従ってリクエストを行うようにしてください。

4

大きなファイルの場合、node.jsのIOストリームのパイプ処理の概念を使用することをお勧めします。読み取りのためにローカルファイルを開き、ラックスペースへのHTTP要求を開始して、ファイル読み込みプロセスのデータイベントをHTTP要求プロセスにパイプしたいとします。

Here's an article on how to do this

スーパーエージェントは、小さなファイルに対しては問題ありませんが、リクエストを開始する前に、リクエスト本体全体がメモリにロードされていると想定しているため、大きなファイル転送には最適なアプローチではありません。

通常、ノードのHTTPリクエストライブラリが適切なヘッダーを送信するため、リクエストヘッダーについて特に心配する必要はありません。 APIに必要なHTTPメソッド(おそらくPOST)を使用していることを確認してください。ラックスペースの場合は、APIトークンとともにX-Auth-Token余分なヘッダーを追加する必要があります。

36
app.get('/img/bg.png', function(req, res) { 
    res.sendFile('public/img/background.png') 
}) 

http://expressjs.com/api.html#res.sendfile

使用 "res.sendFile"。 "res.sendfile"は非推奨です。

+6

res.sendFileを代わりに使用する – NuclearPeon

+0

パスを相対パスにする必要がある場合は、 を使用する必要があります。var path = require( 'path'); router.get( '/ GetAudio'、function(req、res、next){ res.sendFile(__ dirname + "/public/img/background.png"); }); – Mahesh

+0

これは何がポイントですか?エイリアスを作成しているだけですが、ファイルをその場所に移動した可能性があります – kim366

関連する問題