Görüntüleri bir MongoDB veritabanında depolama


174

Görüntüleri metin yerine bir MongoDB veritabanında nasıl saklayabilirim? MongoDB veritabanında bir dizi görüntü oluşturabilir miyim? Videolar için de aynısını yapmak mümkün olacak mı?


1
Kısa cevap edilir: Birlikte bunları doğru kodlamak eğer Evet, (küçük) görüntüleri saklayabilir base64, bkz stackoverflow.com/questions/11442356 da buldum menge.io/2015/03/24/storing-small-images-in- mongodb çok iyi bir başlangıç ​​noktası.
B - rian

Yanıtlar:


108

Bu tür ikili verilerin depolanmasıyla ilgili ayrıntılar için lütfen GridFS belgelerine bakın .

Özel dil desteği ekranın alt kısmına bağlanmalıdır.


40
GridFS, 16 MB'den büyük belgeler içindir. Tüm ikili veriler bu kadar büyük değildir. Bu sınırı aşabilmek dışında, sadece BinData türü yerine GridFS kullanmanın başka yararları var mı?
Brandon Fitzpatrick

3
Videolar 16 MB'den büyük olma eğilimindedir, bu nedenle bu yanıt muhtemelen makul olacaktır. Belki de bundan bahsetmeliyiz.
Chanoch

1
GridFS kullanmak yerine başka bir çözüm?
Abhishek Mani

1
@AbhishekMani diğer çözüm onları MongoDB'de saklamak değil. Şimdi, 2018'de, bu verileri Amazon'un S3 veya Azure BLOB depolaması gibi bir şeye yazmak son derece daha kolay.
Gates VP

Bence MongoDB ne diyor
xinbenlv

64

"16 MB'tan büyük dosyaları saklamak için her zaman GridFS kullanmalısınız" - Ne zaman GridFS kullanmalıyım?

MongoDB BSON belgeleri 16 MB ile sınırlıdır . Dolayısıyla, dosya dizinizin toplam boyutu bundan küçükse , BinData veri türünü kullanarak bunları doğrudan belgenizde saklayabilirsiniz .

Videolar, resimler, PDF'ler, elektronik tablolar vb. - önemli değil, hepsine aynı şekilde davranılıyor. Bunları görüntülemek için uygun bir içerik türü başlığı döndürmek uygulamanıza bağlıdır.

Check out GridFS belgelerine fazla ayrıntı için.


24

Bunu deneyebilirsiniz:

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

Dosyaları / görüntüleri MongoDB'de depolamak için herhangi bir komut dosyası dili kullanıyorsanız bin veri türünü kullanabilirsiniz. Bin verileri küçük boyutlu dosyaları depolamak için geliştirilmiştir.

Komut dosyası dili sürücünüze başvurun. PHP için buraya tıklayın .


6

kitaplıkların altına yükle

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

ur mongo db bağlayın:

mongoose.connect(‘url_here’);

Veritabanı Şemasını Tanımlama

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

fotoğrafı sunucu tarafına yüklemek için orta katman yazılımı Multer'ı kullanın.

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

sonrası bizim db req

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

Efendim ne bir dizi resim eklemek istersem
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);
   }
});

Sizce:

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

Bu kodla MongoDB'ye tekli ve çoklu görüntüler ekleyebilirsiniz.


0

Bu benim için çalıştı,

  1. Bu dizine git CMD'de: - C: \ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. aşağıdaki komutu yürütün: - mongofiles put image.jpg
  3. kullandığımız belirli dosyalar için: - db.fs.files.find.pretty ()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.