2

Expressでnodejsを使用してファイルをアップロードします。

bodyParser が仕事を成し遂げているのがわかります...

app.use(express.bodyParser({"limit": '2mb'}));

しかし、リクエストのサイズを制限したい場合、アップロードがキャンセルされないことがわかりました。クライアントはデータを送信し続けます。

だから私はこのミドルウェアを書きました:

app.use(function (err, req, res, next) {

   if(err.status == 413){
       req.destroy();
       return res.json({
            "status": 413,
            "message": err
       },413);
   }else
       next(err);
});

動作し、アップロードをキャンセルしますが、クライアントは応答を取得 (または無視) しません!

これは http プロトコルの動作である可能性があると思うので、助けていただければ幸いです。

4

1 に答える 1

0

コードは機能するはずですが、リクエストを破棄しないでください。コードから行を削除するだけreq.destroy();です。ミドルウェアを使用しないために、次のようなことを試すこともできます (私の側では機能していました)。

express = require 'express'
app = express()
swig = require 'swig'
cons = require 'consolidate'
swig.init {
  root: __dirname + '/views'
  allowErrors: true
}
app.set 'views', __dirname + '/views'
app.set 'view options', {layout: false}
app.engine '.html', cons.swig
app.set 'view engine', 'html'

# set upload dir
app.use express.bodyParser {uploadDir: './upload'}

app.get '/', (req, res) ->
  res.render 'index.html', {}

app.post '/file-upload', (req, res) ->
  # you can get some info about files here (size, path, name, type)
  console.log req.files
  # check that size is good
  if req.files.thumbnail.size > 200
    res.send 413
  else
    res.send 'Uploaded!'

console.log 'listen port 3000'
app.listen 3000

そして形式で:

<form method="post" enctype="multipart/form-data" action="/file-upload">
<input type="file" name="thumbnail">
<input type="submit">
</form>

詳細はこちらをご覧ください。これがあなたを助けることを願っています。

于 2013-01-05T13:05:26.433 に答える