Nodejs express Multer 如何使用?
Nodejs express Multer 如何使用?
https://github.com/expressjs/multer
var express = require('express')
var multer = require('multer')
var app = express()
app.use(multer({ dest: './uploads/'}))
console.log(req.files)
看到上传文件只需要这样子配置,但是我想要判断大小商场的类型不符合就不上传,看了文档都不知道如何使用。如这个怎么使用?
onFileUploadData: function (file, data) {
console.log(data.length + ' of ' + file.fieldname + ' arrived')
}
我这样做有错误:
router.post('/up', function (req, res) {
if (req.file) {
onFileUploadData: function (file, data) {
console.log(data.length + ' of ' + file.fieldname + ' arrived')
}
}
});
请教一下。谢谢!
当然可以!Multer
是一个 Node.js 中间件,用于处理 multipart/form-data
类型的数据,主要用于上传文件。接下来我会详细介绍如何使用 Multer
来设置文件上传,并且增加一些验证规则。
示例代码
首先,我们需要安装 express
和 multer
:
npm install express multer
然后,我们可以创建一个简单的 Express 应用来处理文件上传:
// 引入所需的模块
const express = require('express');
const multer = require('multer');
// 创建 Express 应用
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());
}
});
// 配置 Multer 文件过滤器
const fileFilter = (req, file, cb) => {
// 检查文件类型是否为图像
if (file.mimetype.startsWith('image/')) {
cb(null, true);
} else {
cb(new Error('Only images are allowed'), false);
}
};
// 创建 Multer 实例
const upload = multer({
storage: storage,
limits: { fileSize: 1 * 1024 * 1024 }, // 限制文件大小为 1MB
fileFilter: fileFilter
});
// 设置路由
app.post('/upload', upload.single('avatar'), (req, res) => {
if (req.fileValidationError) {
return res.status(400).send(req.fileValidationError);
}
if (!req.file) {
return res.status(400).send('No file uploaded.');
}
res.send('File uploaded successfully!');
});
// 错误处理中间件
app.use((err, req, res, next) => {
if (err.code === 'LIMIT_FILE_SIZE') {
res.status(400).send('File size exceeds the limit.');
} else {
res.status(500).send('Internal server error.');
}
});
// 启动服务器
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
解释
-
引入模块:
express
用于创建 Web 应用。multer
用于处理文件上传。
-
配置 Multer:
storage
配置文件存储的位置和文件名。fileFilter
配置文件过滤器,只允许上传图像文件。limits
配置文件大小限制(例如 1MB)。
-
设置路由:
upload.single('avatar')
表示处理单个文件上传,字段名为avatar
。- 如果文件验证失败,返回相应的错误信息。
-
错误处理:
- 处理文件大小超出限制的情况。
通过以上步骤,你可以实现基本的文件上传功能,并添加文件类型和大小的验证。希望这对你有所帮助!
理论上讲,可以通过app.use(multer({ dest: './uploads/', maxSize: xxxxx}))
来设置
你这个文件能上传上么 我这个设置dest上传完之后,路径下没有我上传的文件
https://github.com/jpfluger/multer/blob/examples/multer-upload-files-to-different-directories.md
<pre>
var mwMulter1 = multer({ dest: ‘./uploads1/’ });
app.post(’/files1’, mwMulter1, function(req, res) {
console.log('IN POST (/files1)');
console.log(req.body)
var filesUploaded = 0;
if ( Object.keys(req.files).length === 0 ) {
console.log('no files uploaded');
} else {
console.log(req.files)
var files = req.files.file1;
if (!util.isArray(req.files.file1)) {
files = [ req.files.file1 ];
}
filesUploaded = files.length;
}
res.json({ message: 'Finished! Uploaded ' + filesUploaded + ' files. Route is /files1' });
});
</pre>
正式上线了之后也是Express暴露给浏览器?如果前面还有HTTP Server,类似Nginx之类,可以通过它们的POST BODY LIMIT来限制大文件的上传,Express里面就不用再写多余代码了。不知道这样满足不满足你的要求。
服务器收到上传文件后,怎样提醒前端页面上传成功呢?因为不是ajsx提交的所以我没有办法像ajax的success中收到服务器发来的json数据,这该怎么办呢?
要使用 Multer
来处理文件上传,并添加文件大小和类型验证,你需要配置 Multer
中间件并设置文件过滤器。以下是完整的步骤和示例代码:
-
安装必要的依赖:
npm install express multer
-
创建一个基本的 Express 应用:
var express = require('express'); var multer = require('multer'); var app = express(); // 设置存储引擎 var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, './uploads/'); }, filename: function (req, file, cb) { cb(null, file.fieldname + '-' + Date.now()); } }); // 创建 multer 实例 var upload = multer({ storage: storage, limits: { fileSize: 1 * 1024 * 1024 }, // 限制文件大小为 1MB fileFilter: function (req, file, cb) { // 检查文件类型 if (file.mimetype.startsWith('image/')) { cb(null, true); // 允许上传图像文件 } else { cb(new Error('Only image files are allowed!')); } } }).single('avatar'); // 单个文件上传,字段名为 'avatar' // 路由处理 app.post('/upload', function (req, res) { upload(req, res, function (err) { if (err instanceof multer.MulterError) { return res.status(500).json(err); } else if (err) { return res.status(500).json(err); } // 文件已成功上传 res.send('File uploaded successfully!'); console.log(req.file); // 输出上传的文件信息 }); }); app.listen(3000, function () { console.log('Server is running on port 3000'); });
-
前端 HTML 表单(用于测试):
<form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="avatar" /> <button type="submit">Upload</button> </form>
在这个示例中,我们使用了 multer
的 diskStorage
存储引擎来保存上传的文件到 ./uploads/
目录,并设置了文件大小限制为 1MB 和文件类型过滤器(只允许图像文件)。如果文件不符合条件,Multer 将抛出一个错误。
希望这个示例能帮助你理解如何在 Node.js 中使用 Multer
处理文件上传,并进行文件大小和类型的验证。