Nodejs 使用express的bodyParser上传文件,请问如何设置文件大小

Nodejs 使用express的bodyParser上传文件,请问如何设置文件大小

上传大一点的文件就报错:Request Entity Too Large。请问如何解决?

8 回复

当然可以!在使用 Express 和 bodyParser 中间件处理文件上传时,如果上传的文件过大,可能会遇到 413 Request Entity Too Large 错误。这是因为默认情况下,Express 的 bodyParser 中间件对请求体的大小有限制。

要解决这个问题,你需要配置 bodyParser 或使用专门处理文件上传的中间件,比如 multer。下面是两种方法的示例代码和解释:

方法一:配置 bodyParser

如果你仍然想使用 bodyParser,可以通过设置 limit 参数来限制请求体的大小。以下是一个示例:

const express = require('express');
const bodyParser = require('body-parser');

const app = express();

// 设置请求体的最大大小为50MB
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));

app.post('/upload', (req, res) => {
    console.log(req.body);
    res.send('File uploaded successfully!');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

方法二:使用 multer 处理文件上传

更推荐的方法是使用 multer 这个专门用于处理文件上传的中间件。你可以通过设置 limits 来限制文件大小。

首先安装 multer:

npm install multer

然后使用以下代码:

const express = require('express');
const multer = require('multer');

const app = express();

// 配置 multer 存储策略
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/');
    },
    filename: function (req, file, cb) {
        cb(null, file.fieldname + '-' + Date.now());
    }
});

// 设置最大文件大小为50MB
const upload = multer({ 
    storage: storage,
    limits: { fileSize: 50 * 1024 * 1024 } 
});

app.post('/upload', upload.single('file'), (req, res) => {
    console.log(req.file);
    res.send('File uploaded successfully!');
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

在这个示例中,我们使用了 multer 来处理文件上传,并通过 limits 设置了最大文件大小为 50MB。upload.single('file') 表示只处理单个文件上传,且该文件字段名为 file

这两种方法都可以有效地解决上传大文件时报错的问题。


搜到了一个 connect.limit(‘5.5mb’) , 但没具体文档,不知道怎么用

还是stackoverflow强大啊,终于找到了: app.use(express.bodyParser({ uploadDir: __dirname + ‘/upload’, keepExtensions: true, limit: ‘50mb’ }));

express的官网上文档上居然找不到。。。

找不到就打开源代码找撒…

在express官网肯定找不到了,因为那些中间件是connect里的,去connect的官网找就找到啦,express用了bodyParser, bodyParser又用了multipart处理文件,所以你看multipart的文档就有了:http://www.senchalabs.org/connect/multipart.html

学习了~~~

那超出大小的异常怎么处理呢?

要在使用 Express 和 bodyParser 中设置文件上传的大小限制,你需要配置 express 的中间件来处理请求实体的大小限制问题。默认情况下,body-parser 对于文件上传并不直接支持大小限制,因此我们需要使用 multer 这样的中间件来专门处理文件上传,并且可以设置文件大小限制。

示例代码

首先,确保安装了必要的依赖包:

npm install express multer

然后,你可以这样配置你的 Express 应用:

const express = require('express');
const multer = require('multer');

const app = express();

// 配置 Multer 来处理文件上传,并设置文件大小限制
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/') // 设置文件存储的目录
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now()) // 设置文件名
  }
});

const upload = multer({ 
  storage: storage,
  limits: { fileSize: 1000000 } // 设置文件大小限制为 1MB
});

app.post('/upload', upload.single('file'), (req, res) => {
  res.send('File uploaded successfully.');
});

app.listen(3000, () => console.log('Server is running on port 3000'));

解释

  1. Multer 配置:

    • storage: 配置文件的存储方式,这里我们将其保存到服务器上的 uploads/ 目录。
    • limits: 设置上传文件的最大尺寸,这里是 1MB(1000000 字节)。
  2. 路由处理:

    • app.post('/upload', upload.single('file'), ...): 定义一个 POST 路由 /upload,并使用 upload.single('file') 处理单个文件上传。这里的 'file' 是 HTML 表单中 <input type="file" name="file"> 的字段名。

通过这种方式,你可以避免因文件过大而出现的 Request Entity Too Large 错误。

回到顶部