使用节点和表达在mongoose中的strore图像

时间:2017-07-27 20:06:04

标签: angularjs node.js express mongoose

我想从数据库中的输入type="file"保存图像,但我不知道如何做到这一点。首先,我尝试了保存图像全局路径,但这不可能考虑到安全性。而且我不确定我是否认为正确。请查看我的代码并给我一些建议

html代码:

<div class="form-group">
  <div class="input-group">
    <input type="text" name="image" class="form-control" ng-model="product.productData.image" readonly>
   <span class="input-group-btn">        
  <span class="btn btn-default btn-file add-img-upload"><span class="glyphicon glyphicon-folder-open"></span> Browse 
  <input type="file" ng-model="product.productData.image" name="image" id="imgInp" onchange="angular.element(this).scope().photoChanged(this.files)">
  </span>
</span>
  </div>
</div>

api.js

    router.post('/courses', function(req, res){
    var course = new Product();
    course.imagePath    = req.files.image;
        course.save(function(err){
            if(err){
                 console.log(err); 
            } else {
                res.json({success:true, message:'saved'});
            }
        })
    });   

服务

userFactory.createNewCourse = function(productData){
    return $http.post('/api/courses', productData)
}

模式

var productSchema = new Schema({
imagePath: {
    type: String,

},
});

module.exports = mongoose.model('Product', productSchema);

在上面的代码product中是controllerAs

1 个答案:

答案 0 :(得分:0)

您可以通过两种方式实现这一目标,首先您必须将图像保存到任何云,例如AWS s3,您可以使用AWS javascript SDK保存它,并且当文件成功上传到s3然后将其公共URL保存到您的mongodb。在这种情况下,您必须学习AWS javascript SDK,或者您可以找到任何其他云API来上传和保存图像。

另一种方法是将您的图像转换为base64字符串并将该字符串保存在您的mongodb上,但这将是一个巨大的字符串。您可以轻松地将图像转换为base64,并将其从base64字符串转换回javascript中的图像。

此外,如果您使用快速服务器,则默认情况下,express会为您的公共文件夹提供服务,因此如果您使用abc.jpg将图像保存在公共文件夹中,则可以通过点击localhost:3000/api/abc.jpg轻松访问。确保端口与快速服务器的端口相同。