Stocker des images dans une base de données MongoDB

Comment puis-je stocker des images dans une base de données MongoDB plutôt que simplement du texte? Puis-je créer un tableau d'images dans une base de données MongoDB? Il sera possible de faire la même chose pour les vidéos?

123
demandé sur Community 2011-01-25 20:38:30

7 réponses

consultez GridFS docs pour plus de détails sur le stockage de ces données binaires.

Soutien pour votre langue spécifique doit être lié à au bas de l'écran.

80
répondu Gates VP 2011-01-25 23:54:34

"Vous devriez toujours utiliser GridFS pour stocker des fichiers de plus de 16 MO" - Quand dois-je utiliser GridFS?

MongoDB BFILS documents sont plafonnés à 16 MO. Donc, si la taille totale de votre tableau de fichiers est inférieure à cela, vous pouvez les stocker directement dans votre document en utilisant le type de données BinData .

Vidéos, images, fichiers PDF, tableurs, etc. - il peu importe, ils sont tous traités de la même façon. C'est à votre application de retourner un en-tête de type de contenu approprié pour les afficher.

consultez la documentation GridFS pour plus de détails.

49
répondu Mike Causer 2017-07-25 08:38:17

Vous pouvez essayer celui-ci:

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
répondu victoriza 2017-07-25 08:38:38

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

il y a un plugin Mangoose disponible sur NPM appelé Mangoose-file. Il vous permet d'ajouter un champ de fichier à un schéma Mangoose pour le téléchargement de fichier. Je ne l'ai jamais utilisé, mais il pourrait s'avérer utile. Si les images sont très petites, Vous pouvez Base64 les encoder et sauvegarder la chaîne dans la base de données.

stocker un peu petit (moins de 1MB) fichiers avec MongoDB en NodeJS sans GridFS

10
répondu Mick Cullen 2017-05-23 12:10:31

vous pouvez utiliser le type de données bin si vous utilisez n'importe quel langage de script pour stocker des fichiers/images en MongoDB. Bin data est développé pour stocker des fichiers de petite taille.

reportez-vous à votre langage de script du pilote. Pour PHP, cliquez sur ici .

5
répondu Tharindu 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);
   }
});

de votre point De vue:

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

avec ce code vous pouvez ajouter des images simples aussi bien que multiples en MongoDB.

3
répondu AshvinG 2017-07-25 08:40:20

installer ci-dessous les bibliothèques

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

se connecter ur mongo db :

mongoose.connect(‘url_here’);

Définir un Schéma de base de données

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

utilisant le middleware Multer pour télécharger la photo sur le côté serveur.

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

post req. à notre 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
répondu Samkit Shah 2018-08-28 12:19:02