2016-12-09 218 views
1

我也使用猫鼬,如果这是相关的。我正在尝试允许用户上传个人资料照片。必须有一个简单的方法,不是吗?如何使用MongoDB + Node.js(Express.js)上传图片?

+0

你可以试试[multer(https://github.com/expressjs/multer) – bugwheels94

+0

的可能的复制[如何使用快车来的NodeJS上传图片文件并显示(http://stackoverflow.com/问题/ 36477145 /如何上传图像文件和显示使用express表nodejs) – RaR

回答

0

我认为你应该尝试割绒。

从multer网站简单:

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

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

应该上传您的上传文件夹文件(下根),并在返回JSON文件。

0

在本例中,您将看到如何将发送的文件存储到服务器目录中,然后从那里接收并保存它们。你也可以直接保存它们。首先你用角度拿起文件,你可以使用任何东西,如果你想你可以在这里查看更多细节。这是我的小例子,代码是在玉石中。

<input type="file" name="file" onchange="angular.element(this).scope().selectFile(this.files)"/> 
<button ng-click="savePhoto()">Save </button> 

在您的角度控制器

$scope.savePhoto = function() { 
var fd = new FormData(); 
    fd.append("file", $scope.files[0]); 
)) ; 
$http.post("/xxx/photos", fd, { 
     withCredentials: true, 
     headers: { 'Content-Type': undefined }, 
     transformRequest: angular.identity 
     }).success(function (data) { 
     $scope.image = data; // If you want to render the image after successfully uploading in your db 
     }); 
    }; 

在后端使用NPM安装multer。然后在app.js中,您可以设置一个中间件来收集您发送的文件。只需在这里执行console.log(req),以检查是否在此处获取文件。 Multer在这里做魔术。

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; 
    } 
})); 

因此,这里图像将存储在您的服务器中的这个路径(公共/ 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); 

     }); 
+0

如何删除/ public/assets/img/profile /中的图像后,它存储在数据库? – TeodorKolev

+0

@TeodorKolev需要fs模块并使用fs.unlink传递路径作为参数。 –

相关问题