Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Node.js/Express和Mongoose在MongoDB中存储图像_Node.js_Mongodb_Mongoose - Fatal编程技术网

使用Node.js/Express和Mongoose在MongoDB中存储图像

使用Node.js/Express和Mongoose在MongoDB中存储图像,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,目前我使用angular file upload处理图像上传,我只需将图像保存到服务器的文件系统并在HTML中引用它。但是,我想尝试将图像直接存储在我为博客文章定义的模式中的数据库中 var blogSchema = new Schema({ title: String, author: String, body: String, likes: { type: Number, default: 0 }, comments: [{ type: Schema.

目前我使用angular file upload处理图像上传,我只需将图像保存到服务器的文件系统并在HTML中引用它。但是,我想尝试将图像直接存储在我为博客文章定义的模式中的数据库中

var blogSchema = new Schema({
    title: String,
    author: String,
    body: String,
    likes: { type: Number, default: 0 },
    comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }],
    date: { type: Date, default: Date.now },
    imageURL: String   // instead of this

    image: // store it directly
});

"imageURL: String" stores the path to the image.
我想这样做,这样我就可以有一个存储图像本身的字段。我在想,也许我可以像以前一样上传图像,但在上传后转换图像,并将其以二进制(或其他形式)存储在Mongo中。这可能吗


谢谢

下面的示例演示如何使用mongoose将图像上载到MongoDB。单击此链接以获取详细信息

router.get(“/show/:i”),函数(req,res){
var dataGet={u id:req.params.i}
fileModel.findOne(dataGet.exec)(函数(err,doc){
如果(错误){
返回下一个(错误)
}
var base64dataa=新缓冲区(doc.fileData,'binary')。toString('base64');
var ress={
fileData:base64dataa,
mime:doc.mimeType,
名称:doc.fileName
}
//res.json(ress)
res.contentType('image/jpeg')
res.send(doc.fileData)
})
});
router.post('/display/',函数(req,res){
风险值数据={
文件:req.body.fileData,
mime:req.body.mime,
名称:req.body.name
}
res.json(数据)

})
这是将数据保存到mongodb的代码。
数据是二进制的。我可以显示这个“image/jpg,base64,{{data}”
但我不明白如何显示
base64数据

file.on('data',函数(data){
缓冲区+=数据;
var file=新文件模型({
fileData:数据

})
谢谢你的回答!我可以使用它将文件保存到数据库中。你知道如何使用Angular在客户端加载图像吗?@Jaco如何在从文件管理器选择图像后自动获取图像路径?@BryanCho你可以使用fromCharCode和btoa对从文档中获取的数据进行编码,然后使用assig将其添加到图像的源代码中。例如,
src=“data:image/png;base64,”+btoa(String.fromCharCode.apply(null,img.data))
I can this display'image/jpg,base64,{{data}}但我不明白如何显示base64数据”我猜这个句子缺少一个动词。如果我是正确的,请添加它。数据是二进制数据的变量。我可以将其显示为“image/jpg,base64,但base64数据与数据不同。我甚至不能显示它。您能解释一下避免删除的解决方案吗?
var express = require('express');
var fs = require('fs');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var imgPath = '/path/yourimage.png';

mongoose.connect('localhost', 'testing_storeImg');

var schema = new Schema({
    img: { data: Buffer, contentType: String }
});

var A = mongoose.model('A', schema);

mongoose.connection.on('open', function () {
  console.error('mongo is open');

  A.remove(function (err) {
    if (err) throw err;

    console.error('removed old docs');

    // store an img in binary in mongo
    var a = new A;
    a.img.data = fs.readFileSync(imgPath);
    a.img.contentType = 'image/png';
    a.save(function (err, a) {
      if (err) throw err;

      console.error('saved img to mongo');

      // start a demo server
      var server = express.createServer();
      server.get('/', function (req, res, next) {
        A.findById(a, function (err, doc) {
          if (err) return next(err);
          res.contentType(doc.img.contentType);
          res.send(doc.img.data);
        });
      });

      server.on('close', function () {
        console.error('dropping db');
        mongoose.connection.db.dropDatabase(function () {
          console.error('closing db connection');
          mongoose.connection.close();
        });
      });

      server.listen(3333, function (err) {
        var address = server.address();
        console.error('server listening on http://%s:%d', address.address, address.port);
        console.error('press CTRL+C to exit');
      });

      process.on('SIGINT', function () {
        server.close();
      });
    });
  });

});