当前位置: 首页 > 面试题库 >

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

施宏大
2023-03-14
问题内容

目前,我使用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中。这可能吗?

谢谢!


问题答案:

下面的示例显示了如何使用猫鼬将图像上传到MongoDB。单击此链接获取原始来源

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

});


 类似资料:
  • 问题内容: 到目前为止,我已经接受了HTML格式的文件,并通过使用模块以angular的形式发布了文件。现在,我想在Mongoose中接受此文件,并将其存储到MongoLab上托管的NoSQL MongoDB中。我已经阅读了有关此模块的信息,并遵循了基本文档,但到目前为止,只有我自己。在解释问题的开始之前,让我发布我的代码: 我的HTML表单: 我的角度代码: 控制台日志返回正确的文件对象。 迄今

  • 问题内容: 我正在寻找一些有关如何使用node.js和mongodb安全存储密码和其他敏感数据的示例。 我希望所有内容都使用一种独特的盐,该盐将与哈希一起存储在mongo文档中。 为了进行身份验证,我是否仅需要盐析和加密输入并将其与存储的哈希值匹配? 我是否应该解密该数据,如果应该解密? 私钥或什至加盐方法如何安全地存储在服务器上? 我听说AES和Blowfish都是不错的选择,我应该使用什么?

  • 本文向大家介绍Node.js 使用Mongoose和Express.js路由将数据保存到MongoDB,包括了Node.js 使用Mongoose和Express.js路由将数据保存到MongoDB的使用技巧和注意事项,需要的朋友参考一下 示例 设定 首先,使用以下命令安装必要的软件包: 代码 然后,将依赖项添加到server.js文件中,创建数据库模式和集合名称,创建Express.js服务器,

  • 我只是想安装node.js/express/ejs.我知道ejs不是真正的超文本标记语言,所以我很难只显示一个简单的图像。有人能给我指出正确的方向吗? 目录结构为: 我的应用程序/服务器。js myApp/视图/索引。ejs myApp/徽标。jpg 现在我有 我走错方向了吗?谢谢

  • 问题内容: 我试图弄清楚如何可以将图像直接发布到GridFS而不先将其作为临时文件存储在服务器上的任何位置。 我正在使用Postman(chrome ext。)发布文件,并且使用以下方法设法将此帖子存储为文件: 当从服务器上的文件创建readStream时,我也能够从readStream直接存储到GridFS。(请参见代码) 我有以下文件,它们侦听POST并基本上将其传递给。 saveFromRe

  • 本文向大家介绍Node.js 使用Mongoose连接到MongoDB,包括了Node.js 使用Mongoose连接到MongoDB的使用技巧和注意事项,需要的朋友参考一下 示例 首先,使用以下命令安装Mongoose: 然后,将其添加server.js为依赖项: 接下来,创建数据库模式和集合名称: 创建一个模型并连接到数据库: 接下来,启动MongoDB并server.js使用运行node s