我有以下上传个人资料图片的路线。每个用户只能有一个配置文件映像,因此在上传新映像时,我想从文件系统和mongo db中删除旧映像。到目前为止,我一直在尝试使用fs.unlink从文件系统中删除文件。以下是我发布路线的代码:
app.post('/upload', ensureAuthenticated, (req, res) => {
uploadDir = path.join(__dirname, './public/uploads/');
let oldFileName = '';
Image.findOne({ member_id: req.user.member_id })
.then(oldImage => {
oldFileName = oldImage.imageName;
console.log(uploadDir + oldFileName);
fs.unlink(uploadDir + oldFileName, (err) => {
console.log(err);
});
}).catch(error => {
console.log(error);
});
upload(req, res, (err) => {
if (err) {
res.render('index', {
msg: err
});
} else {
const newImage = {
imageName: req.file.filename,
image_caption: req.body.image_caption,
member_id: req.user.member_id
}
new Image(newImage)
.save()
.then(image => {
req.flash('success_msg', 'Image added');
res.redirect('/');
})
.then(resize => {
let imgHeight = 150;
let imgWidth = 150;
sharp(req.file.path)
.blur(.3)
.toFile('public/thumbs/blurred_' + req.file.originalname, function (err) {
if (!err) {
req.flash('success_msg', 'Thumbnail created');
//res.redirect('/');
}
});
})
.catch(error => {
console.log(error);
});
}
});
});
我面临的问题是:
TypeError:无法读取null的属性“ imageName” 在Image.findOne.then.oldImage(C:\ Users \ Amin Baig \ Desktop \ Projects \ photogallery2 \ app.js:130:36)
它还告诉我,尽管我可以看到错误中的路径和文件,但它找不到文件。
{ Error: EBUSY: resource busy or locked, unlink 'C:\Users\Amin Baig\Desktop\Projects\photogallery2\public\uploads\I7SN7PAEl_1531803568428_dont_judge_me-wallpaper-1920x1080.jpg'
errno: -4082,
code: 'EBUSY',
syscall: 'unlink',
path: 'C:\\Users\\Amin Baig\\Desktop\\Projects\\photogallery2\\public\\uploads\\I7SN7PAEl_1531803568428_dont_judge_me-wallpaper-1920x1080.jpg' }
答案 0 :(得分:0)
如果用户还没有文件,您是否不能使用包含Mongo查询的if语句来检查个人资料图片的存在是“ true”还是false?
答案 1 :(得分:0)
如何处理用户首次上传并且没有任何旧图像的情况。当我尝试删除时,出现以下错误:
您可以使用fs.existsSync(path)
检查路径是否存在
如果路径存在,则返回true,否则返回false。
'use strict';
let fs = require('fs');
let fileNameWithPath = uploadDir + oldFileName;
console.log(fileNameWithPath);
if (fs.existsSync(fileNameWithPath)) {
fs.unlink(uploadDir + oldFileName, (err) => {
console.log(err);
});
}