Archivia le immagini in un database MongoDB


174

Come posso archiviare immagini in un database MongoDB piuttosto che solo testo? Posso creare una matrice di immagini in un database MongoDB? Sarà possibile fare lo stesso per i video?


1
La risposta breve è: Sì, è possibile memorizzare le immagini (piccole) se li si codifica correttamente con base64, vedere stackoverflow.com/questions/11442356 ho anche trovato menge.io/2015/03/24/storing-small-images-in- mongodb un ottimo punto di partenza.
B - rian,

Risposte:


108

Si prega di consultare GridFS documenti per i dettagli sulla memorizzazione di tali dati binari.

Il supporto per la tua lingua specifica dovrebbe essere collegato nella parte inferiore dello schermo.


40
GridFS è per documenti> 16 MB. Non tutti i dati binari sono così grandi. Oltre ad essere in grado di superare questo limite, ci sono altri vantaggi nell'uso di GridFS invece del solo tipo BinData?
Brandon Fitzpatrick,

3
I video tenderanno ad essere> 16 MB, quindi questa risposta è probabilmente ragionevole. Forse dovrei menzionarlo però.
Chanoch,

1
qualsiasi altra soluzione, piuttosto che usare GridFS?
Abhishek Mani,

1
@AbhishekMani l'altra soluzione non è affatto salvarli in MongoDB. Ora, nel 2018, è infinitamente più semplice scrivere questi dati su qualcosa come Amazon S3 o Azure BLOB storage.
Gates VP,

Penso a quello che dice MongoDB
xinbenlv,

64

"Dovresti sempre usare GridFS per archiviare file di dimensioni superiori a 16 MB" - Quando dovrei usare GridFS?

I documenti MongoDB BSON sono limitati a 16 MB. Pertanto, se la dimensione totale dell'array di file è inferiore a quella, è possibile memorizzarli direttamente nel documento utilizzando il tipo di dati BinData .

Video, immagini, PDF, fogli di calcolo, ecc. - Non importa, sono tutti trattati allo stesso modo. Spetta all'applicazione restituire un'intestazione del tipo di contenuto appropriata per visualizzarli.

Consulta la documentazione di GridFS per maggiori dettagli.


24

Puoi provare questo:

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

13

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

C'è un plugin Mongoose disponibile su NPM chiamato mongoose-file. Ti consente di aggiungere un campo file a uno schema Mongoose per il caricamento di file. Non l'ho mai usato ma potrebbe rivelarsi utile. Se le immagini sono molto piccole, puoi Base64 codificarle e salvare la stringa nel database.

Memorizzazione di alcuni file di piccole dimensioni (meno di 1 MB) con MongoDB in NodeJS SENZA griglia


8

È possibile utilizzare il tipo di dati bin se si utilizza qualsiasi linguaggio di scripting per archiviare file / immagini in MongoDB. I dati bin sono sviluppati per archiviare file di piccole dimensioni.

Fare riferimento al driver del linguaggio di scripting. Per PHP, clicca qui .


6

installa sotto le librerie

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

connetti il ​​tuo mongo db:

mongoose.connect(‘url_here’);

Definire lo schema del database

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

utilizzando il middleware Multer per caricare la foto sul lato server.

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

invia req al nostro 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();
});

Signore, se volessi aggiungere una serie di immagini
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);
   }
});

Dal tuo punto di vista:

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

Con questo codice è possibile aggiungere immagini singole o multiple in MongoDB.


0

Questo ha funzionato per me,

  1. Vai in questa directory In CMD: - C: \ Programmi \ MongoDB \ Server \ 4.0 \ bin
  2. eseguire il comando seguente: - mongofiles put image.jpg
  3. per selezionare i file utilizziamo: - db.fs.files.find.pretty ()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.