使用multer包在node express中使用api上传图像

时间:2018-06-14 12:26:28

标签: node.js express image-uploading multer

之前已经问过这个问题。但由于我未能解决我的问题,我再次提问。

我正在尝试使用multer包作为表单数据上传属性的图像,这样我就可以在数据库中存储其他数据和图像路径。我正在使用node express。

我的api -

      api.post('/service', upload.single('servicesImage'),
          (req, res,  next) => {
              console.log(req.file);
              Company.find({ domain: req.headers.domain }, 
                  (err, company) => {
                     const servicecontent = new Servicecontent({
                     description: req.body.description,
                     created_at: Date.now(),
                     created_by: req.body.user_id,
                     company_domain: req.headers.domain,
                     company_uuid: company[0].uuid,
                     image: req.file.path,
                     })
                     servicecontent.save(err => {
                         console.log(err);
                     });
           res.json({ status: "success" });
           });
         });

我看了一个教程,然后我添加了这些代码来上传图片和其他选项 -

   const storage = multer.diskStorage({
      destination: function(req, file, cb){
        cb(null, './src/uploads/');
      },
      filename: function(req, file, cb){
        cb(null, new Date().toISOString()+ file.originalname);
      },
   });

   const upload = multer({storage: storage, limits:{
      fileSize: 1024*1024*5
   },
      fileFilter: fileFilter
   });

   const fileFilter = (req, file, cb) =>{
      if(file.mimetype=== 'image/jpeg' || file.mimetype=== 'image/png'){
         cb(null,true);
      }else{
         cb(null,false);
      }
   };

现在,当我通过邮递员发送数据和图片时,来自console.log(req.file) 我从教程中看到的是有效数据。 Api响应没有任何错误,在数据库中我可以看到所有数据都存储包括图像路径。但我面临的问题是src/upload文件夹中的空白,没有上传图片。

N.B。 - 我使用的是Linux 18.04 Os,并且无法安装fs包。所以当我发送req时,src/upload文件夹没有创建,所以我从文件夹创建了这个目录。

编辑:我现在可以使用此代码上传图片,我不知道为什么这不能提前工作。如果可能的话,我应该关闭这个问题。

2 个答案:

答案 0 :(得分:1)

我现在可以使用此代码上传图片,但我并不完全知道为什么这不早点工作。如果可能的话,我应该关闭这个问题。

答案 1 :(得分:0)

尝试此操作来存储图像。

var storage = multer.diskStorage({
   destination: function (req, file, cb) {
     cb(null, 'uploads/')

   },
   filename: function (req, file, cb) {
       console.log(file);
     cb(null, makeid(3) + file.originalname)
   }
 })

 var upload = multer({ storage: storage })
  `