将图像存储在MongoDB数据库中

时间:2011-01-25 17:38:30

标签: mongodb database

如何将图像存储在MongoDB数据库中而不仅仅是文本中?我可以在MongoDB数据库中创建一个图像数组吗?是否有可能对视频做同样的事情?

8 个答案:

答案 0 :(得分:89)

有关存储此类二进制数据的详细信息,请参阅GridFS文档。

支持您的特定语言应链接到屏幕底部。

答案 1 :(得分:55)

  

“您应该始终使用GridFS来存储大于16MB的文件” - When should I use GridFS?

MongoDB BSON documents的上限为16 MB。因此,如果文件数组的总大小小于此值,则可以使用BinData数据类型将它们直接存储在文档中。

视频,图像,PDF,电子表格等 - 没关系,它们都是一样的。应用程序可以返回适当的内容类型标题来显示它们。

查看GridFS documentation了解详情。

答案 2 :(得分:20)

你可以尝试这个:

String newFileName = "my-image";
File imageFile = new File("/users/victor/images/image.png");
GridFS gfsPhoto = new GridFS(db, "photo");
GridFSInputFile gfsFile = gfsPhoto.createFile(imageFile);
gfsFile.setFilename(newFileName);
gfsFile.save();

答案 3 :(得分:11)

http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb

NPM上有一个名为mongoose-file的Mongoose插件。它允许您将文件字段添加到Mongoose Schema以进行文件上载。我从来没有使用它,但它可能证明是有用的。 如果图像非常小,您可以对它们进行Base64编码并将字符串保存到数据库中。

Storing some small (under 1MB) files with MongoDB in NodeJS WITHOUT GridFS

答案 4 :(得分:6)

如果您使用任何脚本语言在MongoDB中存储文件/图像,则可以使用bin数据类型。 Bin数据被开发用于存储小尺寸的文件。

请参阅脚本语言驱动程序。对于PHP,请单击here

答案 5 :(得分:4)

在库下面安装

var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer');

连接您的mongo数据库:

mongoose.connect(‘url_here’);

定义数据库架构

var Item = new ItemSchema(
  { img: 
  { data: Buffer, contentType: String }
 }
);
var Item = mongoose.model('Clothes',ItemSchema);

使用中间件Multer将照片上传到服务器端。

app.use(multer({ dest: ‘./uploads/’,
rename: function (fieldname, filename) {
return filename;
},
}));

将请求发布到我们的数据库

app.post(‘/api/photo’,function(req,res){
var newItem = new Item();
newItem.img.data = fs.readFileSync(req.files.userPhoto.path)
newItem.img.contentType = ‘image/png’;
newItem.save();
});

答案 6 :(得分:3)

var upload = multer({dest: "./uploads"});
var mongo = require('mongodb');
var Grid = require("gridfs-stream");
Grid.mongo = mongo;

router.post('/:id', upload.array('photos', 200), function(req, res, next){
gfs = Grid(db);
var ss = req.files;
   for(var j=0; j<ss.length; j++){
     var originalName = ss[j].originalname;
     var filename = ss[j].filename;
     var writestream = gfs.createWriteStream({
         filename: originalName
     });
    fs.createReadStream("./uploads/" + filename).pipe(writestream);
   }
});

在您看来:

<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="photos">

使用此代码,您可以在MongoDB中添加单个图像和多个图像。

答案 7 :(得分:0)

这对我有用,

  1. 在CMD中进入此目录:- C:\ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. 执行以下命令:- mongofiles将image.jpg
  3. 对于某些文件,我们使用:- db.fs.files.find.pretty()