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.