【问题标题】:why image is saving as text file in node js为什么图像在节点 js 中保存为文本文件
【发布时间】:2021-07-16 16:21:15
【问题描述】:

我正在尝试使用 multer 将图像保存在数据库中,但图像类型保存为文本格式,但不是 .png、.jpeg、.jpg 格式,

请在我做错的地方帮助我提前谢谢

架构:-

module.exports = mongoose => {

const Role = mongoose.model(
  "role",
  mongoose.Schema(
    {
     roleType : { type:String },
     image: {  type: String,
      data: Buffer}
    }
  )
);
return Role;

};

控制器(创建实例):-

exports.addRoleFields = async (req, res) => {
   const rolesList = new Role ({     
  roleType : req.body.roleType,
  roleImg  : req.file.path,
});
rolesList
.save(rolesList)   
  .then(data => {
    res.status(200).send({ data, statusCode: "200" });
  })
  .catch(err => {
    res.status(500).send({
      message: err.message || "Some error occurred while creating.",
      statusCode: "500"
    });
  })
 }
 }

路线:-

   module.exports = app => {

    const multer = require("multer"),
       storage = multer.diskStorage({
         destination: function(req, file, cb) {
          cb(null, 'uploads')
         },
         filename: function(req, file, cb) {
         cb(null, file.fieldname + '-' + Date.now())
        }
       })
  const uploadImg = multer({storage: storage}).single('image');
  
  const roles = require("../controllers/roles.js");
  var router = require("express").Router();
   router.post("/addRole", uploadImg , roles.addRoleFields);
  app.use('/api/roles', router);
 };

【问题讨论】:

    标签: node.js mongodb multer


    【解决方案1】:

    我只是改变了这个

     filename: function(req, file, cb) {
         cb(null, file.fieldname + '-' + Date.now())
      }
    

    filename: function (req, file, cb) {
        cb(null, file.originalname);
    }
    

    它的工作和保存文件

    【讨论】:

      【解决方案2】:

      为 mongodb 客户端试试这个

      const storage = multer.diskStorage({
          destination: async function (req, file, cb) {
              let path = 'uploads/' + req.body.path;
              if (!fs.existsSync(path)) {
                  fs.mkdirSync(path, { recursive: true }, (err) => {
                      if (err) throw err;
                  });
              }
              await cb(null, path);
          },
          filename: function (req, file, cb) {
      
              cb(null, req.body.filename)
          }
      });
      
      var upload = multer({ storage: storage })
      
      const router = express.Router();
      
      // Upload Image
      router.post("/upload", upload.single('image'), (req, res, next) => {
          return res.json({
              image: req.file.path
          });
      });
      

      在这个upload.single('image')中,file应该是formdata携带文件的名字。 在你的情况下,

       router.post("/addRole", uploadImg('image'), (req, res)=>{
      });
      

      【讨论】:

      • 我使用了这个,但是在上面的代码中遇到了同样的问题,你可以看到我正在使用 from-data 的邮递员。
      • ` router.post("/addRole", uploadImg('image'), (req, res)=>{ });` 检查这个。我对猫鼬没有太多想法。但是mongoclient可以轻松搞定
      • 收到此错误Cannot read property 'transfer-encoding' of undefined
      • 试试这个` router.post("/addRole", uploadImg , (req,res)=>{ console.log(req.file)});
      • { fieldname: 'image', originalname: 'saree.jpg', encoding: '7bit', mimetype: 'image/jpeg', destination: 'uploads', filename: 'roleImg-1626417263461' , path: 'uploads\\roleImg-1626417263461', size: 95917 } 我得到了这个数据
      【解决方案3】:

      猫鼬模型

      const imgSave = new mongoose.Schema({
          img:{
              data: Buffer,
              contentType: String
          }
      });

      【讨论】:

      • img 没有保存在数据库中
      猜你喜欢
      • 2021-02-27
      • 2021-10-12
      • 2020-11-27
      • 1970-01-01
      • 2018-08-04
      • 2021-11-02
      • 2021-09-13
      • 1970-01-01
      • 2021-12-26
      相关资源
      最近更新 更多