Хранить изображения в базе данных MongoDB


174

Как я могу хранить изображения в базе данных MongoDB, а не только в тексте? Могу ли я создать массив изображений в базе данных MongoDB? Можно ли будет сделать то же самое для видео?


1
Короткий ответ: Да, вы можете хранить (небольшие) изображения , если кодировать их правильно с base64, см stackoverflow.com/questions/11442356 я также нашел menge.io/2015/03/24/storing-small-images-in- Mongodb очень хорошая отправная точка.
B -

Ответы:


108

Пожалуйста, смотрите документацию GridFS для получения подробной информации о хранении таких двоичных данных.

Поддержка вашего конкретного языка должна быть связана в нижней части экрана.


40
GridFS для документов> 16 МБ. Не все двоичные данные такие большие. Помимо возможности превышения этого предела, есть ли другие преимущества использования GridFS вместо только типа BinData?
Брэндон Фицпатрик

3
Видео будет иметь размер> 16 МБ, поэтому этот ответ, вероятно, является разумным. Возможно, следует упомянуть об этом, хотя.
Ханох

1
любое другое решение, а не с помощью GridFS?
Абхишек Мани,

1
@AbhishekMani другое решение - не хранить их вообще в MongoDB. Теперь, в 2018 году, бесконечно проще записать эти данные в нечто вроде хранилища Amazon S3 или Azure BLOB.
Гейтс VP

Я думаю, что говорит MongoDB
xinbenlv

64

«Вы всегда должны использовать GridFS для хранения файлов размером более 16 МБ» - Когда мне следует использовать GridFS?

Документы MongoDB BSON ограничены 16 МБ. Поэтому, если общий размер вашего массива файлов меньше этого, вы можете сохранить их непосредственно в своем документе, используя тип данных 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();

13

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

На NPM доступен плагин Mongoose, который называется mongoose-file. Это позволяет вам добавить поле файла в схему Mongoose для загрузки файла. Я никогда не использовал это, но это может оказаться полезным. Если изображения очень маленькие, вы можете закодировать их в Base64 и сохранить строку в базе данных.

Хранение небольших (до 1 МБ) файлов с помощью MongoDB в NodeJS БЕЗ GridFS


8

Вы можете использовать тип данных bin, если вы используете любой язык сценариев для хранения файлов / изображений в MongoDB. Данные бина разработаны для хранения файлов небольшого размера.

Обратитесь к вашему драйверу языка сценариев. Для PHP нажмите здесь .


6

установить ниже библиотеки

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

подключите ур монго дб:

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

Сэр, что, если я хочу добавить массив изображений
Нихил Патил

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 put image.jpg
  3. для выбранных файлов мы используем: - db.fs.files.find.pretty ()
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.