2012-01-11 13 views
13

NodeJSを使用してAPIを構築するサーバーとして機能することを検討しています。NodeJSを使用してAPI呼び出しでファイルをアップロードする

理想的には、情報のセットとファイルシステムに保存できるファイルを送信するためのAPIエンドポイントがあることが理想的です。

私が見たほとんどの例は、フォームを介してファイルを送信するためのものですが、私は投稿要求でこれを行いたいと思います。

私はこれを達成する方法を知っていますか(それが可能な場合)?私が達成したいものを瞬間

は、次の線に沿って何かである:

app.post('/Some/Endpoint/', controller.handleSomeEndpoint, function(request, response) { 
    response.send('Finished Request'); 
}); 

exports.handleSomeEndpoint = function(request, response, next) { 
    var bodyarr = [] 
    request.on('data', function(chunk){ 
     bodyarr.push(chunk); 
    }) 
    request.on('end', function(){ 
     console.log(bodyarr.join('')); 
    }) 
} 

しかし、私はの線に沿ってcurlコマンドを実行した場合のデータと最後には呼び出されない飽きない:

curl http://127.0.0.1:5000/Some/Endpoint/ -F '[email protected]_file' 

乾杯、 マット

+1

フォームは、ファイルを送信するときのPOST要求です。物事のノード側は、異なっている必要はありません。 – Paul

+1

しかしフォームなしでreq.filesを作成するには?どんな例ですか? –

答えて

4

答えはexpressJSはnodejsでのHTTPモジュールとしてポストファイルを扱うのと同じ方法を使用していないということのようです。

すべてのことが必要だったがに書き込まれるファイルを格納するディレクトリを含めた:

私はここで見つける
app.use(express.bodyParser({uploadDir:'./uploads'})); 

http://www.hacksparrow.com/handle-file-uploads-in-express-node-js.html

+0

このようにして、POSTリクエストを通じてファイルを送信するときはいつでも、それを受け入れて./uploadsに保存します。私はそれが安全だとは思わない。 – nick

+0

私はそれが一時的な記憶であるという意味では安全ではないとは思わない、受け入れられている間は恒久的ではなく、恒久的に保管されているか、使用されているわけではありません。要求は認証されている必要があります(私の場合はそれです)。 –

+0

しかし、フォームが使用されていない場合はreq.filesをどのように渡すのですか? APIを介してファイルをアップロードしようとしています。 –

0

あなたのコードが正常に動作する必要があります。カールの使い方は間違っています。代わりにこれを試してみてください:

$ curl -X POST --data-binary @test_file http://localhost:8080 
+0

これは実際にファイルを壊してしまいます... – Devenv

2

を私は避けるためにFormidableを使用するためにあなたを示唆しているであろう匿名のファイルアップロード。

関連する問題