formidable 需要npm i formidable 安包
如果是文件夹,files.file.name只会给你一个地址,你需要根据地址"/"进行切割为数组,然后根据数组遍历使用fs.mkdirSync创建文件夹,最后使用fs.rename重命名到对应创建的文件。(如果不重命名文件就不是上传的文件名。比如:上传的文件名为text.txt。upload文件里面看到的文件名就upload-qweqeqweq.txt)
router.post('/upload', function (req, res) {
const form = formidable({multiples: true});
//设置保存文件的本地地址
form.uploadDir = "upload";
form.keepExtensions = true;//保存扩展名
//form.maxFieldsSize = 20 * 1024 * 1024;//上传文件的最大大小
form.parse(req, (err, fields, files) => {
console.log(files)
let fileName = ''
//切割上传文件的路径
let list = files.file.name.split('/')
//如果是上传的文件夹,需要遍历进行创建文件夹
for (let i = 0; i < list.length - 1; i++) {
fileName = fileName + list[i] + '/'
}
console.log(fileName)
//创建文件夹
fs.mkdirSync(form.uploadDir + '/' + fileName, {recursive: true})
//重命名文件到上传文件夹路径
fs.rename(files.file.path, form.uploadDir + '/' + files.file.name, function (err) {
if (err) throw err;
console.log('重命名完成');
})
if (err) {
next(err);
return;
}
res.json({fields, files});
});
})