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

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

Ответ 1

Подробнее о хранении таких двоичных данных см. в документах GridFS.

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

Ответ 2

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

MongoDB Документы BSON ограничены размером 16 Мб. Поэтому, если общий размер вашего массива файлов меньше этого, вы можете хранить их непосредственно в своем документе, используя тип данных BinData.

Видео, изображения, PDF файлы, электронные таблицы и т.д. - это не имеет значения, все они рассматриваются одинаково. До вашего приложения для возврата соответствующего заголовка содержимого контента для их отображения.

Подробнее см. документацию GridFS.

Ответ 3

Вы можете попробовать следующее:

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

Ответ 4

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

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

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

Ответ 5

Вы можете использовать тип данных bin, если вы используете любой язык сценариев для хранения файлов/изображений в 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;
},
}));

отправить запрос в нашу базу данных

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

Ответ 7

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.

Ответ 8

Это сработало для меня,

  1. Перейти в этот каталог в CMD: - C:\Program Files\MongoDB\Server\4.0\bin
  2. выполните следующую команду: - mongofiles put image.jpg
  3. для выбранных файлов мы используем: - db.fs.files.find.pretty()

Ответ 9

Лучший способ сохранить изображение В nodejs Backend - Professional Recommended

var async = require('async');
var accessPath = path.join(__dirname, "../uploadLocation");
var folderName = new Date().getTime();

async.auto({
                        makeDir: function(next, results) {
                            makeDir(accessPath, folderName, next);
                        },
                        writeFile: ['makeDir', function(next, results) {
                            writeFile(accessPath, folderName, req.body.user.ImgData, req.body.user.email, next);
                        }],
                    }, function(err, success) {
                        if (err) {
                            console.log("error occurs while saving image")
                        } else {
                            console.log("success", success)

                        }
                    });

  var makeDir = function(accessPath, folderName, next) {
                    try {
                        console.log("accessPath inside makeDir", accessPath, folderName)
                        fs.mkdirSync(accessPath + "/upload/user/" + folderName);
                        next(null, "done")
                    } catch (e) {
                        console.log("error in creating folder");
                        next(e, "Err")
                    }
                }

                var writeFile = function(accessPath, folderName, ImgData, email, next) {

                    var userImgName = email + ".jpg";
                    fs.writeFile(accessPath + "/upload/user/" + folderName + "/" + userImgName, ImgData, function(err, success) {
                        if (err) {
                            next(e, "Err")
                        } else {
                            console.log("success write file");
                            next(null, null);
                        }
                    });
                }