首页 > 解决方案 > 替换上传文件时,使用 multer 在 Node js 中获取文件名 undefine

问题描述

我想在这里更新我的上传图像文件。当我上传文件时,文件名显示为“http://localhost:3200/images/undefined”并且文件也没有上传。但是 createNewPost 函数在上传图像时可以正常工作。我正在使用 sequelize 方法来创建更新函数。

    //!----------new post-----------------------------//
exports.createNewPost = (req, res, next) => {
  //req.body.post = JSON.parse(req.body.post);
  //todo - this what i mean, cz logged.--//
  console.log(req.file);
  const url = req.protocol + "://" + req.get("host");
  const post = {
    title: req.body.title,
    content: req.body.content,
    userId: req.userdata.userId,
    imageUrl: url + "/images/" + req.file.filename,
    // take from token, here hardcoded
  };

  Post.create(post)
    .then((resulter) => {
      res.status(200).json({
        message: "New Post Created",
        post: resulter,
      });
    })
    .catch((err) => {
      res.status(500).json({
        message: "post not saved",
        error: err,
      });
    });
};

这是更新功能。

exports.updatePost = (req, res, next) => {
  const id = req.params.id;
  const url = req.protocol + "://" + req.get("host");
  let updatedPost = {
    title: req.body.title,
    content: req.body.content,
    imageUrl: url + "/images/" + req.file.filename,
 
  };
  const userId = req.userdata.userId;
  Post.update(updatedPost, { where: { id: id, userId: userId } })
    .then((resulter) => {
      res.status(200).json({
        result: resulter,
        message: "Post Updated",
        post: updatedPost,
        id:updatedPost.imageUrl,
      });

    })
    .catch((error) => {
      res.status(500).json({
        message: "Not Working",
        error: error,
      });
    });
};

多配置


const MIME_TYPES = {
  "image/jpeg": "jpg",
  "image/png": "png",
  "image/jpg": "jpg",
};

const storage = multer.diskStorage({
  destination: (req, file, callback) => {
    callback(null, "images");
  },
  filename: (req, file, callback) => {
    const extension = MIME_TYPES[file.mimetype];
    callback(null, Date.now() + "." + extension);
    console.log(filename);
  },
});

module.exports = multer({ storage: storage }).single("image");

标签: javascriptnode.jssequelize.jscrud

解决方案


推荐阅读