Stocker des images dans une base de données MongoDB
7 réponses
"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.
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();
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
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 .
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.
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();
});