【问题标题】:Remove an image before uploding it with multer and node.js in a react native application在反应原生应用程序中使用 multer 和 node.js 上传图像之前删除图像
【发布时间】:2021-07-02 15:46:44
【问题描述】:

我有一个应用程序,用户可以上传个人资料图片,我想要做的是删除之前存储的图片,然后上传新的,但我拥有的代码只是删除了让我认为是先上传。

const UploadProfileImage = multer.diskStorage({
  destination(req, file, callback) {
    callback(null, "./src/UserImages");
  },
  filename(req, file, callback) {
    callback(null, `${file.originalname}`);
  },
});

const upload = multer({
  fileFilter: (req, file, callback) => {
    let files = fs.readdirSync(UserImagesPath);
    console.log(files.includes(req.user.user_img));
    if (files.includes(req.user.user_img)) {
      fs.unlinkSync(
        path.join(__dirname, "../UserImages") + "\\" + req.user.user_img
      );
      console.log("Done");
    }
  },
  storage: UploadProfileImage,
});

为什么这段代码不起作用?

我还有一个问题!

当我在没有删除图像的代码的情况下上传图像时,实际图片会发生变化,但在前端仍然显示一个据说不存在的图像,我认为它仍然可以显示该图像,因为它在缓存中。 如何从缓存中删除图像?

【问题讨论】:

    标签: node.js react-native expo multer


    【解决方案1】:

    您不需要multer 来删除图像,但fs 可以帮助您做到这一点。您可以创建一个中间件来执行此操作。

    const { promisify } = require('util')
    
    const unlinkProm = promisify(fs.unlink);
    
    
    
    app.get('path', UploadProfileImage, (req, res) => {
          // remove the image after saving one
          // make sure you provide the path of older image
           try {
           const res = await unlinkProm(oldImagePath);
           res.send('udpated data')
           } catch (e) {
             console.log(e);
           }
    })
    

    【讨论】:

    • 谢谢你的例子,但我已经解决了这个问题。我现在有另一个问题,即前端显示的照片不存在,但他仍然可以访问它,因为我想程序将它保存在缓存中。你知道如何从缓存中删除一些东西吗?
    • 是的,尝试更改图像的名称,它会自动使用新的。这个是最简单的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2019-02-21
    • 1970-01-01
    • 2021-08-26
    • 2019-03-22
    • 1970-01-01
    相关资源
    最近更新 更多