推荐答案
在 Express 中处理文件上传通常使用 multer 中间件。以下是一个简单的示例:
// www.javascriptcn.com code example
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
// 设置文件存储路径和文件名
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/');
},
filename: function (req, file, cb) {
cb(null, Date.now() + path.extname(file.originalname)); // 添加时间戳防止文件名冲突
}
});
// 初始化上传中间件
const upload = multer({ storage: storage });
// 处理单个文件上传
app.post('/upload', upload.single('file'), (req, res) => {
res.send('文件上传成功');
});
app.listen(3000, () => {
console.log('服务器运行在 http://localhost:3000');
});本题详细解读
1. 安装 multer
首先,你需要安装 multer 中间件:
npm install multer
2. 配置 multer
multer 提供了多种存储方式,最常见的是 diskStorage,它允许你将文件存储在服务器的磁盘上。你可以通过 destination 和 filename 两个选项来配置文件的存储路径和文件名。
destination: 指定文件存储的目录。filename: 指定文件的名称。为了避免文件名冲突,通常会在文件名前加上时间戳。
3. 处理文件上传
在 Express 路由中使用 upload.single('file') 来处理单个文件上传。file 是表单中文件输入字段的 name 属性值。
4. 访问上传的文件
上传的文件信息可以通过 req.file 访问。req.file 包含以下属性:
fieldname: 表单中文件输入字段的name属性值。originalname: 上传文件的原始名称。encoding: 文件的编码类型。mimetype: 文件的 MIME 类型。size: 文件的大小(字节)。destination: 文件存储的目录。filename: 文件在服务器上的名称。path: 文件的完整路径。
5. 处理多个文件上传
如果你需要处理多个文件上传,可以使用 upload.array('files', 10),其中 10 表示最多允许上传的文件数量。
app.post('/upload', upload.array('files', 10), (req, res) => {
res.send('多个文件上传成功');
});6. 错误处理
multer 会自动处理文件上传过程中的错误。你可以通过中间件捕获这些错误并进行处理。
app.use((err, req, res, next) => {
if (err instanceof multer.MulterError) {
res.status(400).send('文件上传错误: ' + err.message);
} else {
next(err);
}
});通过以上步骤,你可以在 Express 中轻松处理文件上传。