एक MongoDB डेटाबेस में छवियों को स्टोर करें


174

मैं केवल पाठ के बजाय एक MongoDB डेटाबेस में छवियों को कैसे संग्रहीत कर सकता हूं? क्या मैं एक MongoDB डेटाबेस में छवियों की एक सरणी बना सकता हूं? क्या वीडियो के लिए भी ऐसा करना संभव होगा?


1
संक्षिप्त उत्तर है: हां, आप (छोटी) छवियों को स्टोर कर सकते हैं यदि आप उन्हें सही तरीके से एनकोड करते base64हैं, तो देखें stackoverflow.com/questions/11442356 मैंने भी menge.io/2015/03/24/storing-small-images-in- एक बहुत अच्छा प्रारंभिक बिंदु mongodb
बी - रियान

जवाबों:


108

ऐसे बाइनरी डेटा को संग्रहीत करने के विवरण के लिए कृपया ग्रिड्स डॉक्स देखें।

आपकी विशिष्ट भाषा के लिए समर्थन स्क्रीन के नीचे से जुड़ा होना चाहिए।


40
ग्रिड्स दस्तावेज़ों के लिए है> 16 एमबी। सभी बाइनरी डेटा यह बड़ा नहीं है। उस सीमा को पार करने में सक्षम होने के अलावा, क्या सिर्फ BinData प्रकार के बजाय GridFS का उपयोग करने के लिए कोई अन्य लाभ है?
ब्रैंडन फिट्ज़पैट्रिक

3
वीडियो 16MB के होंगे इसलिए यह उत्तर संभवतः उचित है। हालांकि यह उल्लेख करना चाहिए।
चानोच

1
किसी भी अन्य समाधान, बल्कि फिर ग्रिड का उपयोग?
अभिषेक मणि

1
@AbhishekMani का दूसरा उपाय यह है कि उन्हें MongoDB में संग्रहीत न किया जाए। अब, 2018 में, इस डेटा को अमेजन के S3 या Azure BLOB स्टोरेज की तरह लिखना आसान है।
गेट्स वीपी

मुझे लगता है कि MongoDB क्या कहता है
xinbenlv

64

"आपको हमेशा 16 एमबी से बड़ी फ़ाइलों को संग्रहीत करने के लिए ग्रिड्स का उपयोग करना चाहिए " - मुझे ग्रिड्स का उपयोग कब करना चाहिए?

MongoDB BSON दस्तावेज़ 16 MB पर छाया हुआ है। इसलिए यदि आपकी फ़ाइलों का कुल आकार उससे कम है, तो आप उन्हें सीधे अपने दस्तावेज़ में BinData डेटा प्रकार का उपयोग करके संग्रहीत कर सकते हैं ।

वीडियो, चित्र, पीडीएफ, स्प्रेडशीट, आदि - यह कोई फर्क नहीं पड़ता, वे सभी एक ही व्यवहार कर रहे हैं। उन्हें प्रदर्शित करने के लिए एक उपयुक्त सामग्री प्रकार हेडर वापस करना आपके आवेदन पर निर्भर है।

की जाँच करें GridFS प्रलेखन अधिक जानकारी के लिए।


24

आप इसे आज़मा सकते हैं:

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

एक Mongoose प्लगइन है जो NPM पर उपलब्ध है जिसे mongoose-file कहा जाता है। यह आपको फ़ाइल अपलोड के लिए मानगो स्कीमा में एक फ़ाइल फ़ील्ड जोड़ने देता है। मैंने कभी इसका उपयोग नहीं किया है लेकिन यह उपयोगी साबित हो सकता है। यदि छवियां बहुत छोटी हैं, तो आप बेस 64 को इनकोड कर सकते हैं और स्ट्रिंग को डेटाबेस में सहेज सकते हैं।

ग्रिड के बिना NodeJS में MongoDB के साथ कुछ छोटी (1MB से कम) फ़ाइलों को संग्रहीत करना


8

यदि आप MongoDB में फ़ाइलों / छवियों को संग्रहीत करने के लिए किसी स्क्रिप्टिंग भाषा का उपयोग कर रहे हैं, तो आप बिन डेटा प्रकार का उपयोग कर सकते हैं। बिन डेटा फ़ाइलों के छोटे आकार को संग्रहीत करने के लिए विकसित किया गया है।

अपने स्क्रिप्टिंग भाषा ड्राइवर का संदर्भ लें। PHP के लिए, यहाँ क्लिक करें


6

पुस्तकालयों के नीचे स्थापित करें

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

कनेक्ट उर मोंगो डीबी:

mongoose.connect(‘url_here’);

डेटाबेस स्कीमा को परिभाषित करें

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

सर्वर साइड पर फोटो अपलोड करने के लिए मिडलवेयर मुल्टर का उपयोग करना।

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

हमारे डीबी को पोस्ट करें

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

यदि मैं इमेज की सरणी जोड़ना चाहता हूं, तो सर
निखिल पाटिल

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

आपके विचार में:

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

इस कोड के साथ आप MongoDB में एकल और साथ ही कई चित्र जोड़ सकते हैं।


0

इसने मेरे लिए काम किया,

  1. इस निर्देशिका में CMD में जाएं: - C: \ Program Files \ MongoDB \ Server \ 4.0 \ bin
  2. निम्नलिखित कमांड निष्पादित करें: - mongofiles image.jpg डालते हैं
  3. उन चुनिंदा फ़ाइलों के लिए जिनका हम उपयोग करते हैं: - db.fs.files.find.pretty ()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.