从文件系统node.js中删除图像

时间:2018-07-17 05:15:44

标签: node.js express fs

我有以下上传个人资料图片的路线。每个用户只能有一个配置文件映像,因此在上传新映像时,我想从文件系统和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' }

2 个答案:

答案 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);
  });
}