【问题标题】:How to limit upload file size in express.js如何在 express.js 中限制上传文件的大小
【发布时间】:2012-11-02 16:17:02
【问题描述】:

我收到了这个错误提示

error:request entity too large 

上传30MB左右的视频时,

这里是设置代码

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

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

【问题讨论】:

    标签: node.js upload express


    【解决方案1】:

    Express使用connect中间件,可以通过以下方式指定文件上传大小

    app.use(express.limit('4M'));
    

    Connect Limit middleware

    【讨论】:

    • 还要确保你把它放在 bodyParser() 上面,祝你编码愉快!
    • 但不表达使用节点强大?并且 express 文档说“bodyParser() 中间件在内部利用了 node-formidable 模块,并接受相同的选项。”
    • 我不知道旧版本,但从 v3.01(当前)开始,上传看起来好像是直接通过连接处理的
    • limit('4mb') 似乎是正确的语法(至少现在是这样)。
    • 注意:此答案不再有效,仅适用于不再可用的 Express 版本。
    【解决方案2】:
    app.use(express.limit('4mb'));
    

    但你必须确保在下面添加这一行,

    app.use(express.bodyParser());
    

    app.use(express.json());
    app.use(express.urlencoded());
    

    取决于您使用的版本。

    【讨论】:

    • 由于 nodejs 取出了限制中间件,因此答案在 2016 年不再有效
    • ^^ 他说什么
    【解决方案3】:
    // 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 
    

    【讨论】:

      【解决方案4】:

      我正在使用 Express 4。我尝试了许多 app.use() 语句,包括 this thread 中列出的未弃用的语句,但它们都不起作用。

      结果我只需要在 index.js 中添加一行来更改 Formidable 模块中的 maxFileSize 选项:

      // create an incoming form object
      var form = new formidable.IncomingForm();
      
      // ADD THIS LINE to increase file size limit to 10 GB; default is 200 MB
      form.maxFileSize = 10 * 1024 * 1024 * 1024;
      

      来源:here的评论。

      【讨论】:

        【解决方案5】:
        var upload = multer({ storage : storage2, limits: { fileSize: 1024 * 1024 * 50 } });
        

        使用 nodejs 中的 multer 增加文件上传大小的正确格式

        【讨论】:

          【解决方案6】:

          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
          

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

          app.use(express.urlencoded({ extended: false, limit: '2gb' }));
          

          这里是通过 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
          

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

          【讨论】:

            猜你喜欢
            • 2011-12-05
            • 2010-12-18
            • 1970-01-01
            • 2023-04-06
            • 2017-01-18
            • 1970-01-01
            • 2012-04-26
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多