
本文档详细介绍了如何使用 Multer 中间件在 Node.js 应用中实现图片上传的大小和类型验证。通过配置 Multer 的 limits 和 fileFilter 选项,可以有效地控制上传文件的尺寸和格式,从而确保服务器接收到的图片符合预期要求,避免潜在的安全风险和资源浪费。同时,本文还提供了错误处理中间件,以便更好地向客户端反馈上传过程中的问题。
在使用 Multer 处理文件上传时,对上传文件的大小和类型进行验证是至关重要的。这不仅可以提高应用程序的安全性,还能优化服务器资源的使用。以下将详细介绍如何使用 Multer 实现这些验证。
首先,需要配置 Multer 实例,包括存储引擎、文件大小限制和文件类型过滤。
const multer = require("multer");
const path = require("path");
const shortid = require("shortid");
const diskStorage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, 'imagens');
},
filename: (req, file, cb) => {
cb(null, Date.now() + shortid.generate() + path.extname(file.originalname));
}
});
const upload = multer({
storage: diskStorage,
limits: {
fileSize: 1 * 1024 * 1024 // 1MB
},
fileFilter: (req, file, cb) => {
const acceptedExtensionsList = [".jpg", ".jpeg", ".png"];
const extname = path.extname(file.originalname).toLowerCase();
if (acceptedExtensionsList.includes(extname)) {
cb(null, true); // Accept the file
} else {
cb(new Error("Invalid file extension"));
}
}
});在路由处理函数中使用配置好的 Multer 中间件。
router.post("/criarconta", upload.fields([{ name: "photos" }]), async (req, res) => {
var files = [];
if (req.files) {
files = req.files.photos;
}
if (files.length > 1) {
return res.status(400).json({ erro: "Não é permitido o upload de mais de 1 imagem!" });
}
let photos = [];
if (files && files.length > 0) {
files.forEach((photo, i) => {
photos[i] = photo.path;
});
}
return res.status(200).json({ erro: null, foto: photos });
});为了更好地处理上传过程中可能出现的错误,例如文件大小超出限制或文件类型不符合要求,可以添加一个错误处理中间件。
const errorHandler = (err, req, res, next) => {
if (err instanceof multer.MulterError) {
// Multer error occurred (e.g., file size limit exceeded)
return res.status(400).json({ error: "File upload error: " + err.message });
} else if (err.code === "LIMIT_FILE_SIZE") {
// File size limit exceeded
return res.status(400).json({ error: "File size limit exceeded. Max file size is 1MB." });
} else {
// Other errors
return res.status(500).json({ error: "Internal server error" });
}
};
app.use(errorHandler); // 确保errorHandler在所有路由之后定义通过配置 Multer 的 limits 和 fileFilter 选项,可以方便地实现文件大小和类型验证。添加错误处理中间件可以更好地向客户端反馈上传过程中出现的问题。 这些措施可以提高应用程序的安全性和用户体验。 记住,始终要对用户上传的文件进行验证,以防止潜在的安全风险。
以上就是使用 Multer 进行图片大小和类型验证的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号