将图像存储在MongoDB数据库中

Cha*_*ani 163 database mongodb

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

Gat*_* VP 102

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

应将支持您的特定语言的内容链接到屏幕底部.

  • GridFS适用于> 16MB的文档.并非所有二进制数据都如此庞大.除了能够超越这个限制,使用GridFS而不仅仅是BinData类型还有其他好处吗? (37认同)
  • 视频往往大于16MB,所以这个答案可能是合理的.或许应该提到这一点. (3认同)
  • @AbhishekMani 另一个解决方案是根本不将它们存储在 MongoDB 中。现在,到了 2018 年,将这些数据写入 Amazon S3 或 Azure BLOB 存储等存储设备变得更加容易。 (3认同)
  • 除了使用 GridFS 之外还有其他解决方案吗? (2认同)
  • 嘿@Nux,这个问题是 2011 年提出的,距今已有 8 年多了。2019 年,布兰登问题的答案已经无关紧要。不要使用 MongoDB 来存储这样的二进制数据,我们有_way_更好的解决方案来有效地存储(_和流_)数据。 (2认同)

Mik*_*ser 60

"你应该总是使用GridFS来存储大于16MB的文件" - 我什么时候应该使用GridFS?

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

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

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


小智 22

你可以尝试这个:

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();
Run Code Online (Sandbox Code Playgroud)


Mic*_*len 13

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

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

使用MongoDB在NodeJS中使用GridFS存储一些小的(1MB以下)文件


小智 11

安装下面的库

var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer');
Run Code Online (Sandbox Code Playgroud)

连接你的 mongo 数据库:

mongoose.connect(‘url_here’);
Run Code Online (Sandbox Code Playgroud)

定义数据库模式

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

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

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

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

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();
});
Run Code Online (Sandbox Code Playgroud)


Nen*_*vic 9

可以在 MongoDB 中存储文件吗?

是的。

您应该将文件存储在 MongoDB 中吗?

不。


MongoDB 不是存储文件的好地方。如果您想存储文件,您应该使用 Amazon S3 或 Google Could Storage 等存储。

好的做法是将文件存储在存储中,然后将上传图像的 URI 保存在 MongoDB 中。


小智 8

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

请参阅脚本语言驱动程序.对于PHP,请单击此处.