2012-05-13 4 views
1

ユーザーがコンテンツをアップロードできるようにする簡単なアプリを開発しています。私はExpressが受け入れるファイルサイズを制限したい。私はExpress(node.js)のアップロードファイルサイズを動的に制限する

app.use(express.limit('2mb')); 

を使用することができます知っているが、私は動的を制限を変更したいです。特定のユーザーには上限があります。

content-lengthヘッダーを最初にチェックするのが最善の解決策で、ファイルサイズが制限を超えていても、ファイルのアップロードがディスク(/ tmpディレクトリ)に自動的に保存されている場合は、THENがアップロードを解析します。だから誰かが1GBのファイルを送信した場合、私はそれを許可したくないときでも、このファイルは解析され、ディスクに保存されます。

ありがとうございます!

答えて

1

Expressは、基本的にconnectのlimit()ミドルウェアを使用します。

デフォルトのlimit()を使用する代わりに、独自のミドルウェアを作成したい場合があります。

あなたは、bodyParserを()を追加する前に、ここでの制限のためのソースコード()https://github.com/senchalabs/connect/blob/2.24.2/lib/middleware/limit.js#L40

+1

Hmm .. app.use(express.limit(1)) '(1バイト)を設定しても、アップロードされたファイルはディスクにフラッシュされます。 'content-length'が1バイトより大きければ、' limit'はリクエストを破棄すると思っていました。 編集:OK。すべてが期待どおりに機能します。 'limit'ミドルウェアは' bodyParser() 'の前に置かなければなりません – Pono

+0

@ 250r:リンクが死んでいます。 – Max

4

追加リミット()を調べることで起動することができますので、例えば:

app.use(express.limit(100000)); 
app.use(express.bodyParser({uploadDir: '/tmp', keepExtensions:true})); 

この方法でアップロードされたファイルのウォン大きすぎると/ tmpに保存されません。

+1

これはTBファイルに対しても機能しますか? – qodeninja

+2

express.limit()は推奨されていません。 「エラー:ほとんどのミドルウェア(制限のような)はもはやExpressにバンドルされておらず、別途インストールする必要があります。https://github.com/senchalabs/connect#middlewareを参照してください。」 – Max

関連する問題