multer
是一个用来处理表单数据或者AJAX的插件
/*
处理客户端上传的文件
处理表单数据或者AJAX的插件:multer
*/
const express = require('express');
const multer = require('multer');
const path = require('path');
const app = express();
app.use(express.static('./resource'));
// 详细配置
const storage = multer.diskStorage({
// 指定上传文件的存储目录
// 注意:使用此函数,可以自己提供存储路径,但必须自己手动创建好才行,然后通过string进行传参;自己不写的话,则默认使用操作系统提供的临时文件夹!!!!!!!!
destination(req, file, callback) {
console.log(file);
callback(null, path.join(__dirname, '/download'));
},
// 指定上传文件的重命名,不写此函数,默认是md5加密,并且不会有拓展名的!!!!!!!!!!
filename(req, file, callback) {
callback(null, file.originalname);
},
});
const upload = multer({
// 指定上传文件的存储目录
// dest: path.join(__dirname, './download'),
storage,
});
// 指定接受文件的字段名,并进行数量的限制
// 注意:upload.array() ==> 这里是中间件的使用,内部一定封装了对next() 方法的调用。
/*
.single(fieldname)
接受一个以 fieldname 命名的文件。这个文件的信息保存在 req.file
.array(fieldname[, maxCount])
接受一个以 fieldname 命名的文件数组。可以配置 maxCount 来限制上传的最大数量。这些文件的信息保存在 req.files。
.fields(fields)
接受指定 fields 的混合文件。这些文件的信息保存在 req.files。
fields 应该是一个对象数组,应该具有 name 和可选的 maxCount 属性。
eg:
[
{ name: 'avatar', maxCount: 1 },
{ name: 'gallery', maxCount: 8 }
]
.none()
只接受文本域。如果任何文件上传到这个模式,将发生 "LIMIT_UNEXPECTED_FILE" 错误。这和 upload.fields([]) 的效果一样。
*/
app.post(
'/api/upload',
upload.fields([
{ name: 'imgFile', maxCount: 10 },
{ name: 'avatar', maxCount: 1 },
]),
(req, res) => {
// req.file 是 `avatar` 文件的信息
// req.body 将具有文本域数据,如果存在的话
// console.log(req.body);
// console.log(req.file);
// console.log(req.files);
res.send('success');
}
);
app.listen(8050, () => {
console.log('port 8050 已启动');
});