如何使用MongoDB+;Node.js(Express.js)?

如何使用MongoDB+;Node.js(Express.js)?,node.js,image,mongodb,express,mongoose,Node.js,Image,Mongodb,Express,Mongoose,如果相关的话,我也会使用猫鼬。我正在尝试允许用户上传个人资料图片。一定有一个简单的方法,不是吗?我想你应该试试multer 来自multer站点的简单信息: var multer = require('multer') var upload = multer({ dest: 'uploads/' }) app.post('/upload', uploads.any(), function(req,res){ res.send(req.files); }); 它应该将文件上传到您的u

如果相关的话,我也会使用猫鼬。我正在尝试允许用户上传个人资料图片。一定有一个简单的方法,不是吗?

我想你应该试试multer

来自multer站点的简单信息:

var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })

app.post('/upload', uploads.any(), function(req,res){
    res.send(req.files);
});

它应该将文件上传到您的uploads文件夹(根目录下),并返回JSON格式的文件。

我认为您应该试试multer

来自multer站点的简单信息:

var multer  = require('multer')
var upload = multer({ dest: 'uploads/' })

app.post('/upload', uploads.any(), function(req,res){
    res.send(req.files);
});

它应该将文件上传到您的uploads文件夹(根目录下),并以JSON格式返回文件。

在本例中,您将看到如何将发送的文件存储到服务器目录,然后从那里提取并保存它们。您也可以直接保存它们。首先,使用angular拾取文件,可以使用任何东西,如果需要,可以在此处查看更多详细信息。这是我的小例子,代码是用jade编写的

<input type="file" name="file" onchange="angular.element(this).scope().selectFile(this.files)"/>
<button ng-click="savePhoto()">Save </button>
在后端使用npm安装multer。然后在app.js中,您可以设置一个中间件来收集发送的文件。只需在此处执行console.log(req)即可检查您是否正在获取文件。穆特在这里变魔术了

 app.use(multer({
  dest: path.join(__dirname, 'public/assets/img/profile'),
  rename: function (fieldname, filename, req, res) {
      console.log(req)// you will see your image url etc.
    if(req.session.user) return req.session.user.id;
  }
}));
因此,在这里,映像将存储在服务器的这个路径(public/assets/img/profile)中。现在,您从该服务器获取文件并将其添加到数据库中

var path = require('path');
  var imgPath =path.join(__dirname, '../public/assets/img/profile/' + id + '.jpg'); // this is the path to your server where multer already has stored your image
      console.log(imgPath);
      var a ;

      a = fs.readFileSync(imgPath);
      YourSchema.findByIdAndUpdate( id, {
            $set:
            {'img.data' : a,
              'img.contentType' : 'image/png' }
          }, function(err, doc) {
            if (err)console.log("oi");

          }
      );

   //In case you want to send back the stored image from the db.
      yourSchema.findById(id, function (err, doc) {
        if (err)console.log(err);

        var base64 = doc.img.data.toString('base64');
        res.send('data:'+doc.img.contentType+';base64,' + base64);

      });

在本例中,您将看到如何将要发送的文件存储到服务器目录中,然后从那里提取并保存它们。您也可以直接保存它们。首先,使用angular拾取文件,可以使用任何东西,如果需要,可以在此处查看更多详细信息。这是我的小例子,代码是用jade编写的

<input type="file" name="file" onchange="angular.element(this).scope().selectFile(this.files)"/>
<button ng-click="savePhoto()">Save </button>
在后端使用npm安装multer。然后在app.js中,您可以设置一个中间件来收集发送的文件。只需在此处执行console.log(req)即可检查您是否正在获取文件。穆特在这里变魔术了

 app.use(multer({
  dest: path.join(__dirname, 'public/assets/img/profile'),
  rename: function (fieldname, filename, req, res) {
      console.log(req)// you will see your image url etc.
    if(req.session.user) return req.session.user.id;
  }
}));
因此,在这里,映像将存储在服务器的这个路径(public/assets/img/profile)中。现在,您从该服务器获取文件并将其添加到数据库中

var path = require('path');
  var imgPath =path.join(__dirname, '../public/assets/img/profile/' + id + '.jpg'); // this is the path to your server where multer already has stored your image
      console.log(imgPath);
      var a ;

      a = fs.readFileSync(imgPath);
      YourSchema.findByIdAndUpdate( id, {
            $set:
            {'img.data' : a,
              'img.contentType' : 'image/png' }
          }, function(err, doc) {
            if (err)console.log("oi");

          }
      );

   //In case you want to send back the stored image from the db.
      yourSchema.findById(id, function (err, doc) {
        if (err)console.log(err);

        var base64 = doc.img.data.toString('base64');
        res.send('data:'+doc.img.contentType+';base64,' + base64);

      });

您可以尝试在/public/assets/img/profile/存储在db中后如何从中删除图像?TeodorKolev需要fs模块并使用fs.unlink作为参数传递路径。如何在/public/assets/img/profile/存储在db中后从中删除图像?@TeodorKolev需要fs模块并使用fs.unlink将路径作为参数传递。