如何在MongoDB数据库中存储图像而不仅限于文本?我能否在MongoDB数据库中创建图像数组?同样的方法是否适用于视频?
请参阅GridFS文档,了解如何存储此类二进制数据的详细信息。
您特定语言的支持链接应该在屏幕底部提供。
"如果文件大小超过 16MB,你应该始终使用 GridFS 进行存储" - 我何时应该使用 GridFS?
MongoDB BSON 文档的容量上限是 16 MB。因此,如果你的文件数组总大小小于等于此限制,可以使用 BinData 数据类型直接将它们存储在文档中。
无论是视频、图片、PDF、电子表格等等,都会被同等处理。你的应用程序需要返回适当的内容类型标头以显示它们。
请查看GridFS 文档以获取更多详细信息。
你可以尝试这个:
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();
安装以下库
var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer');
连接您的MongoDB数据库:
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;
},
}));
向我们的数据库发送POST请求
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();
});
var upload = multer({dest: 'uploads/'}); app.post('/api/photos/',upload.array('photos',12),function(req,res){...})
请参阅Multer文档 - Karatheodoryhttp://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb
有一个在NPM上的Mongoose插件叫做mongoose-file,它可以让你在Mongoose Schema中添加文件字段以进行文件上传。我从未使用过它,但它可能会证明很有用。 如果图像非常小,您可以对它们进行Base64编码,并将字符串保存到数据库中。
Storing some small (under 1MB) files with MongoDB in NodeJS WITHOUT GridFS
在NodeJS中使用MongoDB存储一些小于1MB的文件而不使用GridFS。
你可以在MongoDB中存储文件吗?
可以。
但是,你应该在MongoDB中存储文件吗?
不应该。
MongoDB不适合用于存储文件。如果你需要存储文件,应该使用像Amazon S3或Google Cloud Storage这样的存储服务。
最佳做法是将文件存储在存储服务中,并只在MongoDB中保存上传图像的URI。
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中添加单个或多个图像。
base64
正确编码的话,可以存储(小)图片。参考链接:https://dev59.com/Wmgu5IYBdhLWcg3wRlL0 ,我也发现http://menge.io/2015/03/24/storing-small-images-in-mongodb/ 是一个很好的起点。 - B--rian