Przechowuj obrazy w bazie danych MongoDB


174

Jak mogę przechowywać obrazy w bazie danych MongoDB, a nie tylko tekst? Czy mogę utworzyć tablicę obrazów w bazie danych MongoDB? Czy będzie można zrobić to samo z filmami?


1
Krótka odpowiedź brzmi: tak, możesz przechowywać (małe) obrazy, jeśli zakodujesz je poprawnie za pomocą base64, zobacz stackoverflow.com/questions/11442356. Znalazłem również menge.io/2015/03/24/storing-small-images-in- mongodb to bardzo dobry punkt wyjścia.
B - rian

Odpowiedzi:


108

Szczegółowe informacje na temat przechowywania takich danych binarnych można znaleźć w dokumentacji GridFS .

Link do wsparcia dla Twojego konkretnego języka powinien znajdować się u dołu ekranu.


40
GridFS jest przeznaczony dla dokumentów> 16 MB. Nie wszystkie dane binarne są tak duże. Oprócz możliwości przekroczenia tego limitu, czy są jakieś inne korzyści z używania GridFS zamiast tylko typu BinData?
Brandon Fitzpatrick

3
Filmy mają zwykle rozmiar> 16 MB, więc ta odpowiedź jest prawdopodobnie rozsądna. Powinienem jednak o tym wspomnieć.
Chanoch

1
jakieś inne rozwiązanie, zamiast korzystania z GridFS?
Abhishek Mani

1
@AbhishekMani innym rozwiązaniem jest w ogóle nie przechowywać ich w MongoDB. Teraz, w 2018 roku, zapisywanie tych danych do czegoś takiego jak magazyn Amazon S3 lub Azure BLOB jest nieskończenie łatwiejszy.
Wiceprezes Gates

Myślę, co mówi MongoDB
xinbenlv

64

„Do przechowywania plików większych niż 16 MB należy zawsze używać GridFS” - Kiedy należy używać GridFS?

Dokumenty MongoDB BSON są ograniczone do 16 MB. Więc jeśli całkowity rozmiar twojej tablicy plików jest mniejszy, możesz przechowywać je bezpośrednio w swoim dokumencie przy użyciu typu danych BinData .

Filmy, obrazy, pliki PDF, arkusze kalkulacyjne itp. - nie ma znaczenia, wszystkie są traktowane tak samo. Do aplikacji należy zwrócenie odpowiedniego nagłówka typu zawartości w celu ich wyświetlenia.

Sprawdź dokumentację GridFS, aby uzyskać więcej informacji.


24

Możesz spróbować tego:

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


8

Możesz użyć typu danych bin, jeśli używasz dowolnego języka skryptowego do przechowywania plików / obrazów w MongoDB. Dane bin są opracowywane w celu przechowywania małych rozmiarów plików.

Zapoznaj się ze sterownikiem języka skryptowego. W przypadku PHP kliknij tutaj .


6

zainstaluj poniżej biblioteki

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

podłącz swoją bazę danych mongo:

mongoose.connect(‘url_here’);

Zdefiniuj schemat bazy danych

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

używając oprogramowania pośredniego Multer, aby przesłać zdjęcie po stronie serwera.

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

post req do naszej bazy danych

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

Proszę pana, jeśli chcę dodać tablicę zdjęć
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);
   }
});

Twoim zdaniem:

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

Za pomocą tego kodu możesz dodawać pojedyncze lub wiele obrazów w MongoDB.


0

To zadziałało dla mnie,

  1. Przejdź do tego katalogu W CMD: - C: \ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. wykonaj następujące polecenie: - mongofiles put image.jpg
  3. dla wybranych plików używamy: - db.fs.files.find.pretty ()
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.