如何限制express.js中的上传文件大小

pay*_*ike 6 upload node.js express

我得到这个错误说

error:request entity too large 
Run Code Online (Sandbox Code Playgroud)

上传大约30MB的视频时,

这是设置代码

app.use(express.bodyParser({
    uploadDir:'./Temp',
    maxFieldsSize:'2 * 1024 * 1024 * 1024 ',
}));
Run Code Online (Sandbox Code Playgroud)

我不确定如何设置maxFieldsSize属性,需要一些帮助!

Sde*_*ock 8

Express使用连接中间件,您可以使用以下命令指定文件上载大小

app.use(express.limit('4M'));
Run Code Online (Sandbox Code Playgroud)

Connect Limit中间件

  • 注意:此答案不再有效,仅适用于不再可用的Express版本. (6认同)
  • 还要确保你把这个放在bodyParser()之上,开心编码! (5认同)
  • app.use(express.limit( '4M')); 不会工作,需要MB (4认同)
  • limit('4mb')似乎是正确的语法(至少现在如此). (3认同)

小智 5

// Comment sart   
// app.use(express.bodyParser({
//    uploadDir:'./Temp',
//    maxFieldsSize:'2 * 1024 * 1024 * 1024 ',
// }));  

// Add this code for maximun 150mb 
app.use(bodyParser.json({limit: '150mb'}));
app.use(bodyParser.urlencoded({     // to support URL-encoded bodies
limit: '150mb',
extended: true
})); 

// I did it Okay. Goood luck 
Run Code Online (Sandbox Code Playgroud)


Mei*_*ner 5

2020 Express 使用 body-parser urlencoded 函数来控制限制。 http://expressjs.com/en/4x/api.html#express.urlencoded

这些是 node_modules>body-parser>lib>types>urlencoded.js https://www.npmjs.com/package/body-parser中的默认设置

  var extended = opts.extended !== false
  var inflate = opts.inflate !== false
  var limit = typeof opts.limit !== 'number'
    ? bytes.parse(opts.limit || '100kb')
    : opts.limit
  var type = opts.type || 'application/x-www-form-urlencoded'
  var verify = opts.verify || false
Run Code Online (Sandbox Code Playgroud)

您可以在此处看到限制的默认设置为 100kb。所以为了提高你可以使用

app.use(express.urlencoded({ extended: false, limit: '2gb' }));
Run Code Online (Sandbox Code Playgroud)

这是通过 NPM 包字节可用的文件类型选项(由 bodyparser 使用) https://www.npmjs.com/package/bytes

"b" for bytes
"kb" for kilobytes
"mb" for megabytes
"gb" for gigabytes
"tb" for terabytes
"pb" for petabytes
Run Code Online (Sandbox Code Playgroud)

我确定这有点矫枉过正,但我​​希望这对下一个人有所帮助。