web-dev-qa-db-fra.com

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 du texte? Puis-je créer un tableau d'images dans une base de données MongoDB? Sera-t-il possible de faire la même chose pour les vidéos?

154
Chani

Veuillez consulter la documentation GridFS pour plus de détails sur le stockage de telles données binaires.

La prise en charge de votre langue spécifique doit être liée au bas de l’écran.

93
Gates VP

"Vous devez toujours utiliser GridFS pour stocker des fichiers de plus de 16 Mo" - Quand devrais-je utiliser GridFS?

MongoDB documents BSON sont limités à 16 Mo. Ainsi, si la taille totale de votre tableau de fichiers est inférieure à celle-ci, vous pouvez les stocker directement dans votre document en utilisant le type de données BinData .

Vidéos, images, PDF, feuilles de calcul, etc. - peu importe, ils sont tous traités de la même manière. Il appartient à votre application de renvoyer un en-tête de type de contenu approprié pour les afficher.

Consultez le documentation GridFS pour plus de détails.

58
Mike Causer

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

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

Un plugin Mongoose disponible sur NPM s'appelle mongoose-file. Il vous permet d'ajouter un champ de fichier à un schéma Mongoose pour le téléchargement de fichier. Je ne l'ai jamais utilisé, mais cela pourrait être utile. Si les images sont très petites, vous pouvez les encoder en Base64 et enregistrer la chaîne dans la base de données.

Stockage de petits fichiers (moins de 1 Mo) avec MongoDB dans NodeJS WITHOUT GridFS

11
Mick Cullen

Vous pouvez utiliser le type de données bin si vous utilisez un langage de script pour stocker des fichiers/images dans MongoDB. Les données bin sont développées pour stocker des fichiers de petite taille.

Reportez-vous à votre pilote de langage de script. Pour PHP, cliquez ici .

6
Tharindu

installer ci-dessous des bibliothèques

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

connect ur ur mongo db:

mongoose.connect(‘url_here’);

Définir le schéma de base de données

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

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

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

poster 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();
});
4
Samkit Shah
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);
   }
});

A votre avis:

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

Avec ce code, vous pouvez ajouter une ou plusieurs images dans MongoDB.

3
AshvinG