MST
星途 面试题库

面试题:Node.js Express 文件上传实现中的关键中间件及配置

在Node.js的Express框架中实现文件上传功能,通常会用到哪些关键的中间件?请描述如何配置这些中间件来确保文件能够正确上传,包括处理不同文件类型、设置文件大小限制等方面。
35.8万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  1. 关键中间件
    • multer:这是在Express框架中常用的处理文件上传的中间件。
  2. 配置步骤
    • 安装multer:首先在项目目录下通过npm install multer命令安装multer。
    • 引入和配置multer:在Express应用的代码中,引入multer并进行配置。例如:
const express = require('express');
const multer = require('multer');
const app = express();

// 配置文件存储
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, 'uploads/'); // 文件存储目录
    },
    filename: function (req, file, cb) {
        const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9);
        cb(null, file.fieldname + '-' + uniqueSuffix + '.' + file.originalname.split('.').pop()); // 生成唯一文件名
    }
});

// 设置文件大小限制,这里设为10MB
const upload = multer({
    storage: storage,
    limits: {
        fileSize: 10 * 1024 * 1024 // 10MB
    },
    fileFilter: function (req, file, cb) {
        const filetypes = /jpeg|jpg|png|pdf|docx|xlsx/;
        const extname = filetypes.test(file.originalname.split('.').pop().toLowerCase());
        const mimetype = filetypes.test(file.mimetype);

        if (extname && mimetype) {
            return cb(null, true);
        }
        cb(new Error('文件类型不支持'));
    }
});

// 处理单文件上传
app.post('/upload', upload.single('file'), function (req, res) {
    if (req.file) {
        res.send('文件上传成功');
    } else {
        res.status(400).send('文件上传失败');
    }
});

const port = 3000;
app.listen(port, function () {
    console.log(`服务器运行在端口 ${port}`);
});
  • 解释
    • destination:指定文件上传后的存储目录,这里是uploads/目录,需要确保该目录存在,不存在则需手动创建。
    • filename:定义上传文件的命名规则,这里通过时间戳和随机数生成唯一文件名,避免文件名冲突。
    • limits.fileSize:设置允许上传的文件大小限制,单位是字节,这里设置为10MB。
    • fileFilter:用于过滤文件类型,只有符合指定类型(这里是常见的图片、文档类型)的文件才能上传。
    • upload.single('file'):表示处理单个文件上传,'file'是表单中文件字段的名称。如果要处理多个文件上传,可以使用upload.array('files', 5),其中'files'是表单中文件字段名称,5表示最多允许上传5个文件。