Speichern Sie Bilder in einer MongoDB-Datenbank

174

Wie kann ich Bilder in einer MongoDB-Datenbank speichern und nicht nur Text? Kann ich ein Array von Bildern in einer MongoDB-Datenbank erstellen? Wird es möglich sein, dasselbe für Videos zu tun?

Chani
quelle
1
Die kurze Antwort lautet: Ja, Sie können (kleine) Bilder speichern, wenn Sie sie korrekt codieren base64. Siehe stackoverflow.com/questions/11442356 Ich habe auch menge.io/2015/03/24/storing-small-images-in- gefunden . Mongodb ein sehr guter Ausgangspunkt.
B - rian

Antworten:

108

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.

Gates VP
quelle
40
GridFS ist für Dokumente> 16 MB. Nicht alle Binärdaten sind so groß. Gibt es neben der Möglichkeit, diese Grenze zu überschreiten, noch andere Vorteile bei der Verwendung von GridFS anstelle nur des BinData-Typs?
Brandon Fitzpatrick
3
Videos sind in der Regel> 16 MB groß, daher ist diese Antwort wahrscheinlich vernünftig. Sollte dies vielleicht erwähnen.
Chanoch
1
eine andere Lösung, anstatt GridFS zu verwenden?
Abhishek Mani
1
@AbhishekMani Die andere Lösung besteht darin, sie überhaupt nicht in MongoDB zu speichern. Jetzt, im Jahr 2018, ist es unendlich einfacher, diese Daten in etwas wie den S3- oder Azure BLOB-Speicher von Amazon zu schreiben.
Gates VP
Ich denke, was die MongoDB sagt
xinbenlv
64

"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 .

Mike Causer
quelle
24

Sie können dieses versuchen:

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

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

Mick Cullen
quelle
8

Sie können den Datentyp bin verwenden, wenn Sie eine Skriptsprache zum Speichern von Dateien / Bildern in MongoDB verwenden. Bin-Daten wurden entwickelt, um kleine Dateien zu speichern.

Informationen hierzu finden Sie in Ihrem Skript-Sprachtreiber. Für PHP klicken Sie hier .

Tharindu
quelle
6

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();
});
Samkit Shah
quelle
Sir, was ist, wenn ich eine Reihe von Bildern hinzufügen möchte
Nikhil Patil
3
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.

AshvinG
quelle
0

Das hat bei mir funktioniert,

  1. Gehen Sie in dieses Verzeichnis In CMD: - C: \ Programme \ MongoDB \ Server \ 4.0 \ bin
  2. Führen Sie den folgenden Befehl aus: - mongofiles put image.jpg
  3. Für ausgewählte Dateien verwenden wir: - db.fs.files.find.pretty ()
harikesh jaiswal
quelle