Nodejs 使用express的bodyParser上传文件,请问如何设置文件大小
Nodejs 使用express的bodyParser上传文件,请问如何设置文件大小
上传大一点的文件就报错:Request Entity Too Large。请问如何解决?
当然可以!在使用 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 和 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'));
解释
-
Multer 配置:
storage
: 配置文件的存储方式,这里我们将其保存到服务器上的uploads/
目录。limits
: 设置上传文件的最大尺寸,这里是 1MB(1000000 字节)。
-
路由处理:
app.post('/upload', upload.single('file'), ...)
: 定义一个 POST 路由/upload
,并使用upload.single('file')
处理单个文件上传。这里的'file'
是 HTML 表单中<input type="file" name="file">
的字段名。
通过这种方式,你可以避免因文件过大而出现的 Request Entity Too Large
错误。