Зберігання зображень у базі даних MongoDB


174

Як я можу зберігати зображення в базі даних MongoDB, а не лише у тексті? Чи можу я створити масив зображень у базі даних MongoDB? Чи можна буде зробити те ж саме для відео?


1
Коротка відповідь: Так, ви можете зберігати (невеликі) зображення , якщо кодувати їх правильно з base64, см stackoverflow.com/questions/11442356 я також знайшов menge.io/2015/03/24/storing-small-images-in- mongodb дуже хороший вихідний пункт.
B - rian

Відповіді:


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". Це дозволяє додавати поле файлу до схеми мангуста для завантаження файлу. Я ніколи його не використовував, але це може виявитися корисним. Якщо зображень дуже мало, ви можете Base64 кодувати їх і зберегти рядок до бази даних.

Збереження невеликих файлів (до 1 Мб) за допомогою MongoDB в NodeJS БЕЗ GridFS


8

Ви можете використовувати тип даних бін, якщо ви використовуєте будь-яку мову сценаріїв для зберігання файлів / зображень у MongoDB. Дані для сміття розроблені для зберігання файлів невеликого розміру.

Зверніться до свого драйвера мови сценаріїв. Для PHP натисніть тут .


6

встановити нижче бібліотеки

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

підключити ур монго 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;
},
}));

допис до нашого db

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