Antworten:
Weitere Informationen zum Speichern solcher Binärdaten finden Sie in den GridFS- Dokumenten.
Die Unterstützung für Ihre spezifische Sprache sollte am unteren Bildschirmrand verlinkt sein.
"Sie sollten GridFS immer zum Speichern von Dateien verwenden, die größer als 16 MB sind" - Wann sollte ich GridFS verwenden?
MongoDB BSON-Dokumente sind auf 16 MB begrenzt. Wenn die Gesamtgröße Ihres Array von Dateien geringer ist, können Sie sie mit dem Datentyp BinData direkt in Ihrem Dokument speichern .
Videos, Bilder, PDFs, Tabellenkalkulationen usw. - es spielt keine Rolle, sie werden alle gleich behandelt. Es liegt an Ihrer Anwendung, einen geeigneten Inhaltstyp-Header zurückzugeben, um sie anzuzeigen.
Weitere Informationen finden Sie in der GridFS-Dokumentation .
http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb
Auf NPM ist ein Mungo-Plugin namens Mungo-Datei verfügbar. Sie können einem Mungo-Schema ein Dateifeld zum Hochladen von Dateien hinzufügen. Ich habe es nie benutzt, aber es könnte sich als nützlich erweisen. Wenn die Bilder sehr klein sind, können Sie sie von Base64 codieren und die Zeichenfolge in der Datenbank speichern.
Speichern einiger kleiner (unter 1 MB) Dateien mit MongoDB in NodeJS WITHOUT GridFS
Installieren Sie die folgenden Bibliotheken
var express = require(‘express’);
var fs = require(‘fs’);
var mongoose = require(‘mongoose’);
var Schema = mongoose.Schema;
var multer = require('multer');
verbinde ur mongo db:
mongoose.connect(‘url_here’);
Datenbankschema definieren
var Item = new ItemSchema(
{ img:
{ data: Buffer, contentType: String }
}
);
var Item = mongoose.model('Clothes',ItemSchema);
Verwenden Sie die Middleware Multer, um das Foto auf die Serverseite hochzuladen.
app.use(multer({ dest: ‘./uploads/’,
rename: function (fieldname, filename) {
return filename;
},
}));
post req an unsere 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();
});
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);
}
});
Aus Ihrer Sicht:
<form action="/" method="post" enctype="multipart/form-data">
<input type="file" name="photos">
Mit diesem Code können Sie sowohl einzelne als auch mehrere Bilder in MongoDB hinzufügen.
Das hat bei mir funktioniert,
base64
. Siehe stackoverflow.com/questions/11442356 Ich habe auch menge.io/2015/03/24/storing-small-images-in- gefunden . Mongodb ein sehr guter Ausgangspunkt.