是否有办法删除一个多文件后,一定的时间?



我设置multer将图像存储在临时文件夹中,通过POST请求将其发送到Imgur,然后POST请求通过fs.unlink('path')将其从文件夹中删除。我担心会发生未知的错误或崩溃或其他事情,并且一堆图像会卡在临时文件夹中。我可以在所有地方设置一堆fs.unlink,但我想知道是否有一种方法可以设置multer,以便在x时间后删除文件。

这是我乘的设置是什么样子:

const storage = multer.diskStorage({
destination: './public/uploads/',
filename: function(req, file, cb){
cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname));
}
});
// Init Upload Multer
const upload = multer({
storage: storage,
limits:{fileSize: 20000000},
fileFilter: function(req, file, cb){
checkFileType(file, cb);
}
//Do some function here?
}).single('myImage');

基本的POST:

app.post('/upload-image', (req, res) => {
upload(req, res, (err) => {
if (err) {
console.log(err)
} else {
if (req.file == undefined) {
console.log('Error: No File Selected')
} else {
imgur
.uploadFile(`./public/uploads/${req.file.filename}`)
.then((json) => {
//I do some stuff with the json and mongodb then:
fs.unlink(`./public/uploads/${req.file.filename}`, (err) => {
if (err) {
console.error(err)
return
}
console.log('file deleted')
})
})
.catch((err) => {
console.error(err.message);
});
}
}
});
})

有没有什么想法,以确保我没有得到一堆额外的图像在临时文件夹?

这是我的控制器deletePost…

exports.deletePost = async (req, res, next) => {
const postId = req.params.postId;
try {
const post = await Post.findById(postId);
if (!post) {
const error = new Error("Could not find post.");
error.statusCode = 404;
throw error;
}
if (post.creator.toString() !== req.userId) {
const error = new Error("Not authorized!");
error.statusCode = 403;
throw error;
}
// Check logged in user
clearImage(post.imageUrl);
await Post.findByIdAndRemove(postId);
const user = await User.findById(req.userId);
user.posts.pull(postId);
await user.save();
res.status(200).json({ message: "Deleted post." });
} catch (err) {
if (!err.statusCode) {
err.statusCode = 500;
}
next(err);
}
};

这是我的clearImage函数…在Delete image Controller…

中使用此函数。
const clearImage = (filePath) => {
filePath = path.join(__dirname, "..", filePath);
fs.unlink(filePath, (err) => console.log(err));
};

最新更新