将图像存储在MongoDB数据库中


174

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


1
简短的答案是:是的,如果您使用正确编码,则可以存储(小)图像base64,请参见stackoverflow.com/questions/11442356我也发现了menge.io/2015/03/24/storing-small-images-in- mongodb是一个很好的起点。
B–rian

Answers:


108

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

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


40
GridFS适用于大于16MB的文档。并非所有二进制数据都很大。除了能够超过该限制之外,使用GridFS代替BinData类型还有其他好处吗?
布兰登·菲茨帕特里克

3
视频通常会大于16MB,因此这个答案可能是合理的。也许应该提一下。
Chanoch '17

1
任何其他解决方案,而不是使用GridFS?
Abhishek Mani

1
@AbhishekMani另一个解决方案是根本不将它们存储在MongoDB中。现在,在2018年,将这些数据写入Amazon S3或Azure BLOB存储之类的操作变得无比轻松。
盖茨副总裁

我想MongoDB会说什么
-xinbenlv

64

“您应该始终使用GridFS来存储大于16MB的文件”- 我什么时候应该使用GridFS?

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

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

请查看GridFS文档以获取更多详细信息。


24

您可以尝试以下一种方法:

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


8

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

请参考您的脚本语言驱动程序。对于PHP,请单击此处


6

在库下面安装

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

连接您的mongo db:

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

先生,如果我想添加图像数组,该怎么办
Nikhil Patil

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中添加单个和多个图像。


0

这对我有用

  1. 在CMD中进入此目录:-C:\ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. 执行以下命令:-mongofiles放置image.jpg
  3. 对于选择的文件,我们使用:-db.fs.files.find.pretty()
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.