【发布时间】:2021-10-10 23:41:09
【问题描述】:
我正在创建一个管理员面板,管理员可以在其中上传最多 5 张图片(通过 multer),并且路径存储在集群中(猫鼬)。有两个文件夹:Products 和 OptimizedImages。最初,我将它们上传到 Products 文件夹,然后通过 Tinify(用于压缩图像的库)将它们放在 OptimizedImages 上并删除它们(使用 rimraf,因为 fs.unlink 不起作用)。
const results = req.files.map(async file => {
return new Promise(async (resolve, reject) => {
await Product.findByIdAndUpdate(product._id, {
$push: {
paths: {
path: file.filename
}
}
});
const src = tinify.fromFile(`./public/Products/${file.filename}`);
src.toFile(`./public/OptimizedImages/${file.filename}`)
.then(() => {
rimraf(`./public/Products/${file.filename}`, err => {
if (err) {
return reject(err)
}
return resolve(file)
})
}).catch(err => {
throw new Error(err);
})
})
})
Promise.all(results)
.then(resp => {
console.log(resp);
return res.redirect('/admin/dashboard');
}).catch(err => {
throw new Error(err);
})
但是当我上传 5 张图片时,在 OptimizedImages 文件夹中出现 4 张图片,有时是 5 张图片。有时 2 或 3 张图片位于 Products 文件夹中,1 张图片被压缩......也许是因为语法的同步错误?我也试过 rimraf.sync() 等等。
**Multer 设置:**
// Multer Setup
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'public/Products/')
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname));
}
})
// I tried both but nothing =>
// const upload = multer({ storage, limits: { fieldSize: 10 * 1024 * 1024 } });
const upload = multer({ storage });
我确定问题是由错误的语法引起的。我希望有人可以帮助我。
【问题讨论】:
-
请用 repo 更新您的问题并告诉我们您需要帮助的部分,而不是仅仅分享您的 repo。
标签: node.js asynchronous promise fs multer