【发布时间】:2019-05-15 11:53:48
【问题描述】:
我正在尝试使用 multer 将文件上传到文件夹中,它工作正常。
现在我的要求是在将文件上传到“上传”文件夹之前,它应该先将其删除,创建上传文件夹然后上传。
我只想对上传的文件进行操作,而不是对以前存储的数据进行操作。
代码:
const fs = require("fs-extra");
const path = require("path");
const uploadPath = path.resolve(__dirname, "uploads");
const multer = require("multer");
const storage = multer.diskStorage({
destination: "./uploads/",
filename: function(req, file, cb) {
cb(null, file.originalname);
}
});
const upload = multer({ storage: storage });
router.post("/fileupload", upload.array("docs", 10), async function(
req,
res,
next
) {
let result = {};
try {
if (fs.existsSync(uploadPath)) {
fs.removeSync(uploadPath);
console.log("dir removed");
fs.ensureDirSync(uploadPath);
console.log("directory created");
} else {
fs.ensureDirSync(uploadPath);
console.log("directory created");
}
const uploadObj = util.promisify(upload.any());
await uploadObj(req, res);
result.message = "Upload successful";
res.send(result);
} catch (e) {
console.error(e);
console.error("Upload error");
}
});
我也尝试使代码异步,但之后它没有上传任何文件。我的理解是upload.array 是一个中间件,所以它在调用POST 请求时首先运行,然后在此之后运行。所以 multer 正在上传现有文件夹中的数据,然后一旦进入 POST fs 就会删除并再次创建它。
我怎样才能让它工作?
谢谢
【问题讨论】: