Réponses:
Veuillez consulter la documentation GridFS pour plus de détails sur le stockage de ces données binaires.
La prise en charge de votre langue spécifique doit être liée au bas de l'écran.
"Vous devez toujours utiliser GridFS pour stocker des fichiers de plus de 16 Mo" - Quand dois-je utiliser GridFS?
Les documents MongoDB BSON sont limité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, PDF, feuilles de calcul, etc. - peu importe, ils sont tous traités de la même manière. C'est à votre application de renvoyer un en-tête de type de contenu approprié pour les afficher.
Consultez la documentation GridFS pour plus de détails.
http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb
Il existe un plugin Mongoose disponible sur NPM appelé mongoose-file. Il vous permet d'ajouter un champ de fichier à un schéma Mongoose pour le téléchargement de fichiers. Je ne l'ai jamais utilisé mais cela pourrait s'avérer 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 SANS GridFS
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 .
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');
connectez votre mongo db:
mongoose.connect(‘url_here’);
Définir le schéma de la base de données
var Item = new ItemSchema(
{ img:
{ data: Buffer, contentType: String }
}
);
var Item = mongoose.model('Clothes',ItemSchema);
en utilisant le middleware Multer pour télécharger la photo côté serveur.
app.use(multer({ dest: ‘./uploads/’,
rename: function (fieldname, filename) {
return filename;
},
}));
post req à notre base de données
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();
});
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);
}
});
À votre avis:
<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="photos">
Avec ce code, vous pouvez ajouter des images uniques ou multiples dans MongoDB.
Cela a fonctionné pour moi,
base64
, voir stackoverflow.com/questions/11442356 J'ai également trouvé menge.io/2015/03/24/storing-small-images-in- mongodb un très bon point de départ.