Odpowiedzi:
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.
„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.
http://blog.mongodb.org/post/183689081/storing-large-objects-and-files-in-mongodb
W NPM dostępna jest wtyczka Mongoose o nazwie mongoose-file. Pozwala dodać pole pliku do schematu Mongoose w celu przesłania pliku. Nigdy go nie używałem, ale może się przydać. Jeśli obrazy są bardzo małe, możesz je zakodować w Base64 i zapisać ciąg w bazie danych.
Przechowywanie małych (poniżej 1 MB) plików w MongoDB w NodeJS BEZ GridFS
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();
});
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.
To zadziałało dla mnie,
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.