Almacenar imágenes en una base de datos MongoDB


¿Cómo puedo almacenar imágenes en una base de datos MongoDB en lugar de solo texto? ¿Puedo crear una matriz de imágenes en una base de datos MongoDB? ¿Será posible hacer lo mismo con los vídeos?

Author: Community, 2011-01-25

7 answers

Consulte los documentos GridFS para obtener detalles sobre el almacenamiento de dichos datos binarios.

El soporte para su idioma específico debe estar vinculado en la parte inferior de la pantalla.

 80
Author: Gates VP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-01-25 23:54:34

"Siempre debe usar GridFS para almacenar archivos de más de 16MB" - ¿Cuándo debo usar GridFS?

MongoDB Los documentos BSON tienen un límite de 16 MB. Así que si el tamaño total de su matriz de archivos es menor que eso, puede almacenarlos directamente en su documento utilizando el tipo de datos BinData.

Vídeos, imágenes, PDF, hojas de cálculo, etc. - no importa, todos son tratados igual. Depende de su solicitud devolver un documento apropiado encabezado de tipo de contenido para mostrarlos.

Echa un vistazo a la documentación de GridFS para más detalles.

 49
Author: Mike Causer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 08:38:17

Puedes probar este:

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();
 15
Author: victoriza,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 08:38:38

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

Hay un plugin de Mangosta disponible en NPM llamado mongoose-file. Le permite agregar un campo de archivo a un esquema de Mangosta para cargar archivos. Nunca lo he usado, pero podría ser útil. Si las imágenes son muy pequeñas, puede codificarlas Base64 y guardar la cadena en la base de datos.

Almacenar algunos archivos pequeños (menos de 1 MB) con MongoDB en NodeJS SIN GridFS

 10
Author: Mick Cullen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:10:31

Puede usar el tipo de datos bin si está utilizando cualquier lenguaje de scripting para almacenar archivos/imágenes en MongoDB. Bin data está desarrollado para almacenar archivos de pequeño tamaño.

Consulte su controlador de lenguaje de scripting. Para PHP, haga clic en aquí.

 5
Author: Tharindu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 08:39:34
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);
   }
});

En su opinión:

<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="photos">

Con este código puede agregar imágenes individuales y múltiples en MongoDB.

 3
Author: AshvinG,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-25 08:40:20

Instalar debajo de las bibliotecas

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

Conectar ur mongo db:

mongoose.connect(‘url_here’);

Definir esquema de base de datos

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

Usando el middleware Multer para cargar la foto en el lado del servidor.

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

Post req a nuestro 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();
});
 0
Author: Samkit Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-08-28 12:19:02